SQL 中的 Exists 语句返回数组中的一个数组,其中有用数据的键作为 PHP 中的查询本身


Exists statement in SQL returns an array within an array with the key of the useful data as the query itself in PHP

我有一个SQL语句:

SELECT EXISTS(SELECT 1 FROM tbl WHERE id=123456)

使用 PHP-MySQLi-Database-Class 用 PHP 编写,如下所示:

$results = $db->query('SELECT EXISTS(SELECT 1 FROM tbl WHERE property_id=123456)');
print_r($results);

$results看起来像这样:

Array ( [0] => Array ( [EXISTS(SELECT 1 FROM tbl WHERE id=123455)] => 1 ) ) 

该数组中唯一有用的部分是靠近末尾的 1,表示已找到该行。

我通常认为访问它的方式是

$found = $results[0]['EXISTS(SELECT 1 FROM tbl WHERE id=123455)'];

坦率地说,这似乎很荒谬,并且启动不起作用。

如何访问此值,最好以最优雅的方式访问?

在这种情况下,您需要使用 AS 使用别名。

SELECT EXISTS(SELECT 1 FROM tbl WHERE property_id=123456) AS `exists`

然后你可以使用,

$found = $results[0]['exists'];

为所选值指定一个别名 - 该别名将成为您的索引:

$results = $db->query('SELECT EXISTS(SELECT 1 FROM tbl WHERE property_id=123456) AS result');
print_r($results);

将在

Array ( [0] => Array ( [result] => 1 ) )

然后,您可以通过以下方式获得您的特定值:

$found = $results[0]['result'];

请注意,您将始终获得二维结果,因为第一个维度是行号。

除了您使用的类有缺陷且不安全之外,它也很不方便。你真正需要的只是一行

$found = $db->getOne('SELECT 1 FROM tbl WHERE property_id=?i',123456);

使用safeMysql类

请注意,exists是无用的,它不负责返回的嵌套数组。这是你用来责备的阶级。