LEFT JOIN不适用于WHERE

时间:2017-08-06 17:05:25

标签: php mysqli left-join where

我有两个假设的表'应用'和'工作'。我想连接两个表来显示基于'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子句出了什么问题?

有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分: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(带字符串值)才能生效。