各位,我正在编写一个报告查询,由于它有很多参数,我决定为其编写一些函数(欢迎提出建议)。
在我的一个 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/