我有两个假设的表'应用'和'工作'。我想连接两个表来显示基于'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 :(得分: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
(带字符串值)才能生效。