我正在开发一个数据库类,它还会在返回数据集的查询时执行数据安排。我的问题是:我使用一个方法来执行所有查询,但PDO总是在执行时返回true或false,我找不到检查是否必须获取数据并返回它或只是返回执行结果的方法。
例如,当它是一个select语句时,它应返回获取的数据,但是当它是非返回数据查询时,例如update,它只返回布尔执行结果。
以下是方法:
<?php
public function query($sqlobj) {
$stmt = $this->prepare_statement($sqlobj->sqlstring,array_values($sqlobj->sqlvalues));
$res = $stmt->execute();
if ([$res IS A DATASET]) {
$res = $stmt->fetchAll();
}
return $res;
}
?>
在mysqli上,它非常简单,因为查询返回false表示失败,对于不返回数据的成功查询都是true(例如:update语句)和成功查询的数据集资源,用于从DB中获取数据(SELECT ,COUNT,DESCRIBE等),所以这是一个简单的检查:
<?php
if($res !== true && $res !== false){
// fetch results
}
?>
有没有办法在PDO上执行此检查?我做了很多研究,发现了关于PDOStatement :: rowCount以及使用PDOStatement :: fetch()并检查它是否返回false的事情。第二个看起来更有趣,但它并没有解决问题,但是,因为对于非数据返回查询以及返回数据查询结果为空,我将得到错误。任何精彩的想法,伙计们?
答案 0 :(得分:0)
public function query($sqlobj) {
$stmt = $this->prepare_statement($sqlobj->sqlstring,array_values($sqlobj->sqlvalues));
$res = $stmt->execute();
if ($res ) {
$result = $stmt->fetchAll();
foreach ($result as $key => $row) {
echo $link['your_column1'];
}
}
}
答案 1 :(得分:0)
在评论中,用户@NiettheDarkAbsol给了我正确的答案,因为他没有自己发布答案,我会这样做。
问题是:我如何检查查询结果是否可以获取,如果PDO给出的所有信息都是成功的,还是假的失败?答案是PDOStatement :: columnCount()方法:
<?php
public function query($sqlobj) {
$stmt = $this->prepare_statement($sqlobj->sqlstring,array_values($sqlobj->sqlvalues));
$res = $stmt->execute();
if ($stmt->columnCount() > 0) {
$res = $stmt->fetchAll();
}
return $res;
}
?>
正如他所说,columnCount()将返回查询结果集的列数,即使它是空的。如果查询返回不可取的结果,则columnCount()将返回0.
谢谢@NiettheDarkAbsol!