2

根据此处的文档: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(of $checkUnique) 时,我得到以下结果:

object(PDOStatement)#22 (1) { ["queryString"]=> string(70) "SELECT * FROM my_table_name WHERE guid='5114722f24870' AND used=0"}

我知道该used列已设置为1,但它永远不会触发我的if阻止。

我究竟做错了什么?

4

1 回答 1

2

看来 MODx doco 可以使用一些帮助。我只是在本地尝试过,一个空的结果集仍然返回一个PDOStatement对象。

您可以尝试使用PDOStatement::rowCount()来检查返回的行数

$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 文档中提出了一个错误 - http://tracker.modx.com/issues/9502

于 2013-02-08T04:03:22.697 回答