我有一个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
是无用的,它不负责返回的嵌套数组。这是你用来责备的阶级。