PDO查询返回结果,但我无法获取它

时间:2015-10-29 16:40:58

标签: php mysql pdo

你好我试用PDO而且我陷入了一种奇怪的境地。

$statement->fetch()

返回我想要的结果,但是当我尝试获取em时,虽然似乎没有效果。我尝试将$statement->fetchAll()foreach一起使用,但它也无效。

我也试过fetch(PDO::FETCH_ASSOC)但又没有运气。我做错了什么?

$pdoObject = new PDO("mysql:host=$dbhost;dbname=$dbname;", $dbuser, $dbpass);
$pdoObject -> exec("set names utf8");
$sql="SELECT * from prokiriksi_clean where name=:name";
$statement = $pdoObject->prepare($sql);
$statement->execute(array(':name' =>$clean));
$testyo=$statement->fetch();
var_dump($testyo); //returns array

if ($statement->fetch()){
  echo 'inside if'; //it is printed
  while ($record =  $statement->fetch()) {
  var_dump($record); //doesnt print
  echo 'inside while'; //doesnt print
  }
}

2 个答案:

答案 0 :(得分:2)

问题是您没有保存第一个$statement->fetch()的结果,因此您会跳过结果的第一行。鉴于您编写查询的方式,看起来您只有一行,所以在第一行之后没有任何东西可以循环。因此,while永远不会运行。

删除if,然后执行while ($record = $statement->fetch())循环:

while ($record =  $statement->fetch()) {
    var_dump($record);
    echo 'inside while';
}

如果您在进行循环之前需要验证是否有任何结果,可以使用the procedure described in the documentation或只是使用计数器来查看循环是否运行,如下所示:

$rows = 0;
while ($record =  $statement->fetch()) {
    var_dump($record);
    echo 'inside while';
    $rows++;
}
if ($rows) {
    echo "Processed $rows rows\n";
} else {
    echo "Oops! No data!\n";
}

答案 1 :(得分:0)

在执行if语句时,您将获取查询结果,因此无法再次获取它。检查此线程以执行多次提取:PDO multiple fetching of same query