MySQL:查询返回没有结果时出错?

时间:2011-08-26 15:19:52

标签: php mysql pdo

我有一个如下所示的查询:

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'附近使用正确的语法

不知道......

2 个答案:

答案 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`