【发布时间】:2013-02-08 03:37:22
【问题描述】:
根据此处的文档:http://rtfm.modx.com/display/xPDO20/xPDO.query
以下示例:
$result = $modx->query("SELECT * FROM modx_users WHERE id=1");
if (!is_object($result)) {
return 'No result!';
}
我认为这个说法会起作用:
$checkUnique = $modx->query("SELECT * FROM my_table_name WHERE guid = '$unique' AND used = 0");
//guid already used, or non-existant
if(!is_object($checkUnique)){
$result = array(
"result" => false
);
return json_encode($result);
}
当我执行var_dump($checkUnique)时,结果如下:
object(PDOStatement)#22 (1) { ["queryString"]=> string(70) "SELECT * FROM my_table_name WHERE guid='5114722f24870' AND used=0"}
我知道used 列已设置为1,但它永远不会触发我的if 块。
我做错了什么?
【问题讨论】:
-
有什么问题?
$checkUnique似乎是一个对象(准确地说是PDOStatement),因此您的if块将不会被执行;!is_object($checkUnique)将评估为false -
@Phil - 对,那为什么它是一个包含查询字符串的对象呢?它不应该已经执行并变成某种结果吗?链接中的示例表明,如果没有结果,它将返回一个非对象...
-
这是一个 PDOStatement 对象。它不只是神奇地变成一个结果。您需要获取它(即 fetch() 或 fetchAll())
-
@ahren 您没有阅读您linked to 的文档吗? "执行一条 SQL 语句,将结果集作为 PDOStatement 对象返回。"
-
@Mike - 刚刚根据您的建议 (
->fetch()) 进行了尝试,是的,空数据集似乎确实失败了!谢谢 - 如果你把它写成我会接受的答案。
标签: php mysql pdo modx modx-revolution