2016-05-23 4 views
0

皆さん、私はレポートのクエリを書いています。パラメータが多いので、いくつかの関数を書くことにしました。PHP - 関数を使ってSQLクエリを書く

私のwhere節の1つでは、私は節の始めを書いて、次に私の配列にすべての項目を書き込んだ後、次の節を閉じる関数を書いた。これは、関数である:

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

私のクエリです:私は何が起こっているのか確認するために$sqlをエコー、それは次のように示し

$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"; 

右このコードの下:

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をリターンに置き換えることでしたが、そこに複数のリターンを入れることはできません(関数は実行を終了し、句の一部は行方不明)。何か案は?

答えて

1

あなたがものをエコーの代わりに、それを返しているので、それが起こっている...

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