SQL 当 WHERE 子句为假时,查询 returns TABLE 中的第一行

SQL query returns first row in TABLE when WHERE clause is false

对于阅读本文的任何人:上面的已经回答 link与问题无关。

以下查询应该 return 条件为真时的结果或运算符失败时的空数组。

(切记,我非常希望这个查询失败并且 return 什么都没有)。

$search = 'a-long-winded-string';
$sql = "SELECT * FROM table WHERE `id` = '$search'";

这里的问题是它 return 成功时是正确的行,但失败时总是默认为 table 中的第一行(id 为 0)。将第一行 ID 更改为 0 可以解决此问题。

我这里的假设是查询失败,查询的是布尔结果。

是否有解释为什么失败的查询 return 是 ID 为 0 的行?

<?php

$search = 'string';
$sql = "SELECT * FROM foo WHERE `id` = '$search'";

// execute query...

如果您的值不是数字,则应该用引号引起来。

基本上您的搜索字符串评估为 0,因为 id 很可能是一个整数列。

mysql> select cast('foo' AS UNSIGNED);
+-------------------------+
| cast('foo' AS UNSIGNED) |
+-------------------------+
|                       0 |
+-------------------------+
1 row in set, 1 warning (0.00 sec)