我有一个如下所示的查询:
SELECT number
FROM table1
INNER JOIN table2
WHERE name = 'stack_overflow' AND table1.id = table2.id
AND user_id = 5
这会返回一个数字。它做的是正确的,但是当我在内部名称中传递一个在db中不存在的名称时,PHP会给我一个错误。这就是我执行它的方式:
$stmt = $this->db->prepare($sql);
$stmt->execute();
$x = $stmt->fetchColumn();
当表中存在名称时,我总是得到正确的$ x值,但是当它没有时,我得到以下错误:
致命错误:带有消息'SQLSTATE [42000]的未捕获异常'PDOException':语法错误或访问冲突:1064 SQL语法中有错误;检查与MySQL服务器版本对应的手册,以便在'name_that_is_not_in_table'附近使用正确的语法
不知道......
答案 0 :(得分:1)
尝试以这种方式传递名称:
SELECT number
FROM table1
INNER JOIN table2
WHERE name = ? AND table1.id = table2.id
AND user_id = 5
$stmt = $this->db->prepare($sql);
$stmt->execute(array($name));
$x = $stmt->fetchColumn();
答案 1 :(得分:0)
听起来你需要检查首先返回的行数...如果没有,请通知用户。如果它有返回的行数,那么按照您的预期获取名称列。
此外,您应该澄清查询中的alias.column,因为任何新的人都不必猜测给定列来自哪个表...例如您的user_id和name列。 (和“名称”可能是一个保留字并引起阻塞......所以你可能想用剔除标记包裹它
`name`