2017-08-06 70 views
0

我有兩個假設表'應用程序'和'工作'。我想加入這兩個表基於「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

我對括號[]表示法不熟悉,您是否試過用'bindParam'綁定$ usr_login? http://php.net/manual/en/pdo.prepared-statements.php – chiliNUT

+0

考慮到解析是(從((應用程序 AS e)LEFT JOIN(作業 AS u)ON(e .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(一個字符串值),這個工作。