PHP - 使用函数编写 SQL 查询

标签 php mysql

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

在我的一个 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,

如您所见,where 子句是在 $sql 变量的其余部分之前编写的。为什么?在我的示例中,我声明了变量 $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 - 使用函数编写 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37399586/

相关文章:

php - 如何将文本字段值带入 xcode Obj c 中的其他 viewController?

mysql - 比较两个 SQL 查询

java - 将 .txt 文件转换为 .sql 文件后编码错误

PHP MYSQL 横向循环

php - 列出第二列的所有公共(public)值,后跟 mysql 中第一个值中的唯一名称

mysql 随机化结果和优化

phpMyAdmin 不允许将数字转换为十进制?

php - Laravel mysql 连接问题

php - 如何回显 li 的单个 css 类?

php - 如何从 html 插入 select/option 并从 SQL 表中的 array_rand 插入变量