WHERE 不适用于 LEFT JOIN

WHERE does not work with LEFT JOIN

我有两个假设表 'applications' 和 'jobs'。我想加入两个表以显示基于 '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 子句有什么问题?

谁能给我指出正确的方向,好吗?

在 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(带有字符串值)才能工作。