我正在转换到PDO预处理语句,并且我在使用语句进行基本SELECT
查询的语法时遇到问题WHILE
.
foreach
下面的陈述PDO::FETCH_ASSOC
回应了正确的结果,但查询正在跳过返回的第一个结果(因此它总是回显一个比它应该的结果少的结果).
PDO :: FETCH_ASSOC
$stmt = $conn->prepare("SELECT * FROM products");
$stmt->execute();
$row = $stmt->fetch();
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo $row['product_name'].' '.$row['price'].' '.$row['color'], "<br />";
}
Run Code Online (Sandbox Code Playgroud)
的foreach
foreach($conn->query('SELECT * FROM products') as $row) {
echo $row['product_name'].' '.$row['price'].' '.$row['color'], "<br />";
}
Run Code Online (Sandbox Code Playgroud)
Bur*_*lid 10
您已经在while循环之前获取了第一行$row = $stmt->fetch();
.如果删除此行,它将按预期工作.
由于while循环将$row
在每次迭代时覆盖,看起来就像从第二行开始,但会发生的是$row
第一次while循环迭代的值被覆盖.
要使循环按照您编写的方式工作,您需要使用do-while结构:
$row = $stmt->fetch();
do {
echo $row['product_name'].' '.$row['price'].' '.$row['color'], "<br />";
} while($row = $stmt->fetch(PDO::FETCH_ASSOC));
Run Code Online (Sandbox Code Playgroud)
在$row
被while
条件覆盖之前,将首先打印值.
在这种特殊情况下,我不想在没有任何结果时回应任何东西
如果是这种情况,请检查您的查询是否首先返回任何结果.在这里我是明确的检查,因为如果你删除外部if
,你的while
循环仍然会遵循你的意图 - 也就是说,如果没有任何结果,它将不会回应任何东西.
但是,在代码中有明确的意图始终是好的:
if ($stmt->columnCount()) {
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo $row['product_name'].' '.$row['price'].' '.$row['color'], "<br />";
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2322 次 |
最近记录: |