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(の)を実行する$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 に答える