2016-05-23 8 views
0

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?

Antwort

1

Es passiert, weil du Sachen Echo sind, anstatt es von der Rückkehr ...

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