php - 嵌套 PDO 查询失败?

标签 php mysql pdo

我有以下代码:

$sql = $pdo->query("SELECT pageid FROM webpages WHERE ISNULL(deleted) ORDER BY sortindex"); 
while ($row = $sql->fetch(PDO::FETCH_ASSOC)) {
  switch ($row["pageid"]) {
  case "information":
    Write("  <li class='top'><a href='index.php?m=info' id='info' class='top_link'><span class='down'>Information</span></a>");
    Write("    <ul class='sub'>");
    Write("      <li><a href='index.php?m=info&submode=n'>News</a></li>");
    Write("      <li><a href='index.php?m=info&submode=e'>Events</a></li>");
    Write("      <li><a href='index.php?m=info&submode=m'>Minutes</a></li>");
    $subsql = $pdo->query("SELECT * FROM categories WHERE visible = 1 ORDER BY sortindex,category"); 
    while ($catrow = $subsql->fetch(PDO::FETCH_ASSOC)) Write("      <li><a href='index.php?m=info&cat={$catrow["cid"]}'>{$catrow["category"]}</a></li>");
    Write("    </ul>");
    break;
  }
}

当我运行它时,我收到“ fatal error :在第 29 行对/chroot/home/web/html/test.php 中的非对象调用成员函数 fetch()”,第 29 行是“while ($catrow..."行。

但在我的开发服务器上,它可以工作。我应该检查什么来弄清楚如何使其在生产服务器上工作?我不知道为什么它会失败。如果我将代码移出第一个 SQL 循环,它在生产中可以正常工作。这没问题:

$sql = $pdo->query("SELECT pageid FROM webpages WHERE ISNULL(deleted) ORDER BY sortindex"); 
while ($row = $sql->fetch(PDO::FETCH_ASSOC)) {
  switch ($row["pageid"]) {
  case "information":
    Write("  <li class='top'><a href='index.php?m=info' id='info' class='top_link'><span class='down'>Information</span></a>");
    Write("    <ul class='sub'>");
    Write("      <li><a href='index.php?m=info&submode=n'>News</a></li>");
    Write("      <li><a href='index.php?m=info&submode=e'>Events</a></li>");
    Write("      <li><a href='index.php?m=info&submode=m'>Minutes</a></li>");
    Write("    </ul>");
    break;
  }
}
$subsql = $pdo->query("SELECT * FROM categories WHERE visible = 1 ORDER BY sortindex,category"); 
while ($catrow = $subsql->fetch(PDO::FETCH_ASSOC)) Write("Cat: {$catrow["category"]}<br/>");

当我运行它时,第一个循环运行,然后我就得到了类别列表。我知道我无法通过 Stack Overflow 来对我的服务器进行故障排除,但如果有人知道哪种配置调整或其他问题会导致这种行为,我将非常感谢任何提示:)

最佳答案

未完全获取的语句可能会阻止其他语句实际发生(因此 $subsql 不是有效的 PDO 对象)。这可能有效:

$rows = $pdo->query("SELECT pageid FROM webpages WHERE ISNULL(deleted) ORDER BY sortindex")->fetchAll(PDO::FETCH_ASSOC); 
foreach ($rows as $row) {
  switch ($row["pageid"]) {
  case "information":
    Write("  <li class='top'><a href='index.php?m=info' id='info' class='top_link'><span class='down'>Information</span></a>");
    Write("    <ul class='sub'>");
    Write("      <li><a href='index.php?m=info&submode=n'>News</a></li>");
    Write("      <li><a href='index.php?m=info&submode=e'>Events</a></li>");
    Write("      <li><a href='index.php?m=info&submode=m'>Minutes</a></li>");
    $subsql = $pdo->query("SELECT * FROM categories WHERE visible = 1 ORDER BY sortindex,category"); 
    while ($catrow = $subsql->fetch(PDO::FETCH_ASSOC)) Write("      <li><a href='index.php?m=info&cat={$catrow["cid"]}'>{$catrow["category"]}</a></li>");
    Write("    </ul>");
    break;
  }
}

关于php - 嵌套 PDO 查询失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22689161/

相关文章:

php - Yii2 调试 mysql 查询或 mysql_error 等效项

php - 重写代码以使用 PDO,并提高多次插入的效率

php - 字段列表中的列 'id' 在 PHP 中不明确

php - 奇怪的类(Class)行为;在不应该应用时应用到下拉列表选项

php - 使用 Square Connect API 和 PHP 上传商品图像

mysql - 当您认识 parent 时如何搜索特定的 child ?

mysql - 更改列排序规则 - 安全吗?

php - C 程序中的 block 系统命令

mysql - 如何向mySql 数据库的表中添加具有自动递增值的列?

php - 重构字母通配符语句