2017-08-06 2 views
0

私は2つの仮想テーブル 'アプリケーション'と 'ジョブ'があります。私は今、私は単純なクエリ持っどこLEFT JOINで動作しません

(グローバル変数である)「jobs_id」に基づいて結果を表示するには、両方のテーブルに参加したいとユーザーがログイン:

<?php 
$user = 'root'; 
$pass = ''; 
$db = new PDO('mysql:host=localhost;dbname=mydb', $user, $pass); 
$sql = " SELECT e.application_id, e.candidate_login, e.company_id, e.jobs_id, u.jobs_title, u.jobs_manager 
    FROM applications 
     AS e LEFT JOIN jobs 
     AS u ON e.jobs_id = u.jobs_id 
      WHERE e.candidate_login='[usr_login]' 
      "; 
$query = $db->prepare($sql); 
$query->execute(); 
$results = $query->fetchAll(PDO::FETCH_ASSOC); 
?> 

私の問題は、WHERE句が禁止しているということですデータは表示されません。

私は、変数 '[usr_login]'を使用して、ログに記録されたユーザーに属する結果のみを表示しています。それは他のすべてのクエリ(ただしこれ以外のクエリ)でも機能します。

変数を定数(メールアドレスなど)に変更すると、結果が表示されます。

私はまた、他のデータがそれに基づいており、期待どおりに機能するので、変数が存在することも肯定的です。

私の質問は、WHERE句が間違っていますか?

誰でも正しい方向に私を向けることができますか?

+0

[usr_login]のデータとは何ですか? –

+1

ブラケットの[]表記に慣れていないので、$ usr_loginを 'bindParam'でバインドしようとしましたか? http://php.net/manual/en/pdo.prepared-statements.php – chiliNUT

+0

構文解析が((アプリケーション AS e)からLEFT JOIN(ジョブ AS u)の場合は、SQLの字下げは奇妙です.jobs_id = u.jobs_id))) (WHERE(...))。 – philipxy

答えて

0

SQL文で変数を参照する方法は?または:usr_loginのように、コロンの後に名前付きパラメータ、のいずれかであり、そしてあなたはそれを引用するべきではありません。

次に、あなたはそれにあなたの実際の値をバインドする必要があります。

$sql = " SELECT e.application_id, e.candidate_login, e.company_id, e.jobs_id, 
        u.jobs_title, u.jobs_manager 
     FROM  applications AS e 
     LEFT JOIN jobs AS u 
       ON e.jobs_id = u.jobs_id 
      WHERE e.candidate_login = ? 
     "; 
$query = $db->prepare($sql); 
$query->bind_param('s', $usr_login); 
$query->execute(); 

あなたはもちろん、これが機能するためには(文字列値を持つ)変数$usr_loginを持っている必要があります。