PDO查询不在while循环中执行

时间:2016-02-06 14:01:13

标签: php pdo

我正在使用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.
}

3 个答案:

答案 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); 

您正在修改外部变量,并且正在改变您的循环行为。