Leute, ich schreibe eine Abfrage für einen Bericht und da es viele Parameter hat, habe ich beschlossen, ein paar Funktionen dafür zu schreiben (Anregungen sind willkommen).PHP - Verwenden von Funktionen zum Schreiben von SQL-Abfrage
In einer meiner where-Klauseln habe ich eine Funktion geschrieben, die den Anfang der Klausel schreibt, dann schreibe ich jedes Element in mein Array und schließe dann die folgende Klausel. Dies ist die Funktion:
function checkStatuses() {
global $status;
echo " tl.task_log_status in (";
foreach ($status as $option) {
echo "'$option', ";
}
echo "'60') AND";
}
Unten ist meine Frage:
$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";
Direkt unter diesem Code, den ich $sql
hallte, um zu sehen, was los ist, und es zeigt, wie folgt aus:
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,
Wie Sie sehen können, wird die Where-Klausel vor dem Rest der $sql
-Variable geschrieben. Warum ist das? In meinem Beispiel habe ich die Variable $status_code = checkStatuses();
deklariert, aber das hat nicht funktioniert. Weder Aufruf der Funktion direkt, noch Wechsel von Single- zu Double-Quote. Die einzige Möglichkeit, einen Teil der where-Klausel an der richtigen Stelle anzuzeigen, bestand darin, echo in meiner Funktion für eine Rückgabe zu ersetzen, aber ich kann dort keine Mehrfachrückgaben haben (die Funktion beendet die Ausführung und ein Teil der Klausel wird) vermisst werden). Irgendwelche Ideen?