伙计们,我正在写一个查询报告,由于它有很多参数,所以我决定为其编写一些函数(欢迎提出建议)。

在我的一个where子句中,我编写了一个函数,该函数将编写该子句的开头,然后将其写入数组中的每个项目,然后关闭下面的子句。这是功能:

function checkStatuses() {
    global $status;
    echo " tl.task_log_status in (";
    foreach ($status as $option) {
        echo "'$option', ";
    }
    echo "'60') AND";
}


以下是我的查询:

$sql = "SELECT co.company_name as EMPRESA,
    p.project_name as PROJETO,
    p.project_code as CODIGO,
    tk.task_name as TAREFA,
    concat(c.contact_first_name,' ',c.contact_last_name) as USUARIO,
    DATE_FORMAT(tl.task_log_date, '%d/%m/%Y') as DATA,
    tl.task_log_description as DESCRICAO,
    tl.task_log_hours as HORAS_REPORTADAS,
    tl.task_log_costcode as CODIGO_CUSTO
FROM dotp_task_log tl, dotp_companies co, dotp_tasks tk, dotp_projects p, dotp_users u, dotp_contacts c
WHERE tk.task_id = tl.task_log_task
AND
    p.project_id = tk.task_project
AND
    u.user_id = tl.task_log_creator
AND
    c.contact_id = u.user_contact
AND
    co.company_id = p.project_company
AND
    co.company_id = $company
AND
    $project_code
AND
    $status_code
    tl.task_log_date BETWEEN '$initial_date' AND '$end_date'
ORDER BY
    tl.task_log_date";


在此代码的正下方,我回显了$sql以查看发生了什么,它显示如下:

tl.task_log_status in ('0', '1', '3', '2', '60') ANDSELECT co.company_name as EMPRESA,
        p.project_name as PROJETO,
        p.project_code as CODIGO,


如您所见,在$sql变量的其余部分之前编写了where子句。为什么?在我的示例中,我声明了变量$status_code = checkStatuses();,但这没有用。既不直接调用该函数,也不从单引号更改为双引号。我必须在正确的位置显示where子句的一部分的唯一方法是替换函数中的echo以获取返回值,但是我在那里无法获得多个返回值(该函数将终止执行,该子句的一部分将返回丢失)。有任何想法吗?

最佳答案

之所以会这样,是因为您回显内容而不是返回内容...

function checkStatuses() {
    global $status;
    $return = "";
    $return .= " tl.task_log_status in (";
    foreach ($status as $option) {
        $return .= "'$option', ";
    }
    $return .= "'60') AND";
    return $return;
}

关于php - PHP-使用函数编写SQL查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37399586/

10-11 03:21
查看更多