Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL:查询不返回结果时出错?_Php_Mysql_Pdo - Fatal编程技术网

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
?它是否包含任何可能破坏查询的特殊字符?不…它是一个不存在的普通字符串,我执行查询,它只返回任何值。这与我做的不完全一样,但帮助我找到了解决方案。绑定值确实存在诀窍。