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()