Php MySQL:查询不返回结果时出错?
我有一个如下的查询:Php MySQL:查询不返回结果时出错?,php,mysql,pdo,Php,Mysql,Pdo,我有一个如下的查询: SELECT number FROM table1 INNER JOIN table2 WHERE name = 'stack_overflow' AND table1.id = table2.id AND user_id = 5 这将返回一个数字。这是正确的,但是当我传递了一个数据库中不存在的名字时,PHP会给我一个错误。我是这样执行的: $stmt = $this-
SELECT number
FROM table1
INNER JOIN table2
WHERE name = 'stack_overflow' AND table1.id = table2.id
AND user_id = 5
这将返回一个数字。这是正确的,但是当我传递了一个数据库中不存在的名字时,PHP会给我一个错误。我是这样执行的:
$stmt = $this->db->prepare($sql);
$stmt->execute();
$x = $stmt->fetchColumn();
当该名称存在于表中时,我总是得到正确的$x值,但是如果它不存在,我会得到以下错误:
致命错误:未捕获异常“PDOException”,消息为“SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,了解在“name\u that\u not\u in\u table”附近使用的正确语法
不知道 尝试以这种方式传递名称:
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();
听起来您需要先检查返回了多少行。。。如果没有,则通知用户。如果它确实有返回的行计数,则按预期获取name列 此外,您应该在查询中澄清alias.column,因为任何新用户都不必猜测给定列来自哪个表。。。例如“用户id”和“名称”列。(而且“name”可能是一个保留字,会导致阻塞……因此您可能希望用记号将其括起来。)
`name`
显示导致此错误的实际查询。什么是表中的
名称\u不是\u
?它是否包含任何可能破坏查询的特殊字符?不…它是一个不存在的普通字符串,我执行查询,它只返回任何值。这与我做的不完全一样,但帮助我找到了解决方案。绑定值确实存在诀窍。