你好我试用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
}
}
答案 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