2017-08-06 87 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(一个字符串值),这个工作。