Php $modx->;查询不';他似乎没有执行

Php $modx->;查询不';他似乎没有执行,php,mysql,pdo,modx,modx-revolution,Php,Mysql,Pdo,Modx,Modx Revolution,根据此处的文件: 以下为示例: $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"); //

根据此处的文件:

以下为示例:

$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
(of
$checkUnique
)时,我得到的结果是:

object(PDOStatement)#22 (1) { ["queryString"]=> string(70) "SELECT * FROM my_table_name WHERE guid='5114722f24870' AND used=0"}
我知道
used
列已设置为
1
,但它不会触发我的
if


我做错了什么?

似乎MODx doco需要一些帮助。我只是在本地尝试了这个方法,但空的结果集仍然返回一个
PDOStatement
对象

您可以尝试使用检查返回的行数

$count = $checkUnique->rowCount();
或者像这样修改您的查询

$check = $modx->query("SELECT COUNT(1) FROM my_table_name WHERE guid = '$unique' AND used = 0");
$count = $check->fetchColumn();
if (!$count) {
    // etc

我在MODx文档中提出了一个bug-

有什么问题
$checkUnique
似乎是一个对象(
PDOStatement
,准确地说),因此不会执行
if
块<代码>!is_object($checkUnique)将计算为
false
@Phil-对,那么为什么它是一个包含查询字符串的对象呢?它不应该执行并变成某种结果吗?链接处的示例表明,如果没有结果,它将返回一个非对象……它是一个PDOStatement对象。这不仅仅是神奇的结果。您需要获取它(即fetch()或fetchAll())@ahren您没有阅读您需要的文档吗?“执行SQL语句,将结果集作为对象返回。”@Mike-刚刚根据您的建议尝试过(
->fetch()
),是的,空数据集似乎确实失败了!谢谢-如果你能写下来作为回答,我会接受的。呃
rowCount()
返回受影响的行数(即
更新
插入
删除
)。我承认它的名字不好。您正在查找
count($stmt->fetchAll())
@Mike它也适用于MySQL中的
SELECT
语句。经过测试和验证,你可能是对的。文档没有明确说明它将为哪个DBMS工作:“如果关联的PDO语句执行的最后一条SQL语句是SELECT语句,则某些数据库可能返回该语句返回的行数。但是,并非所有数据库都能保证这种行为,便携式应用程序不应依赖这种行为。”@Mike我也不喜欢依赖它,因此上面选择了
SELECT COUNT()