我正在使用PDO从数据库中检索数据。
我可以在第一次迭代中检索'NAME',但不能在第二次迭代后检索。
我的代码如下: -
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$id = $row["ID"];
$query = "SELECT NAME FROM Style_Master WHERE ID=$id";
$stmt = $db->query($query);
$style_name = $stmt->fetch(PDO::FETCH_ASSOC)["NAME"];
echo $style_name; // for first id name is displayed but for next id onwards no style name is displayed.
}
答案 0 :(得分:0)
我想你有一段像这样的代码
$queryA = "SELECT id, somethingelse FROM somewhere";
$stmt = $db->query($queryA);
在while循环之前。 在第一次迭代时,您将获取由 queryA
生成的第一条记录将相同的变量$ stmt与来自
的其他记录重新分配后$query = "SELECT NAME FROM Style_Master WHERE ID=$id";
碰巧在第二次迭代时(假设有许多NAME具有相同的ID,否则循环结束),你会找到一个字段" id"进入你用来查找" name"的查询结果集。 因此,您使用id = null
迭代查询答案 1 :(得分:0)
$ stmt->取(PDO :: FETCH_ASSOC)[" NAME"]; ?
$style_name = $stmt2->fetch(PDO::FETCH_ASSOC)["NAME"];
答案 2 :(得分:0)
您的代码问题与变量范围有关。
当你做这样的事情时:(见评论)
<?php
$stmt = 10;
while (0 < $stmt){
// here, I am acessing the outside varialbe $stmt
echo "{$stmt}<br>"; // 10 will be printed
$stmt = 0; // I am modifying the outside variable.
$stmt--; here the outside variable will be -1
echo "{$stmt}<br>"; // will print -1. And loop will end
}
有了这个,你的代码应该是这样的:
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$id = $row["ID"];
$query = "SELECT NAME FROM Style_Master WHERE ID=$id";
$stmt2 = $db->query($query);
$style_name = $stmt2->fetch(PDO::FETCH_ASSOC)["NAME"];
echo $style_name; // for first id name is displayed but for next id onwards no style name is displayed.
}
这:
$stmt2 = $db->query($query);
因为不应在循环内修改外部变量$stmt
。
当你这样做时:
$stmt = $db->query($query);
您正在修改外部变量,并且正在改变您的循环行为。