【问题标题】:PHP FetchAll() Not returning rowsPHP FetchAll() 不返回行
【发布时间】:2017-07-26 18:58:24
【问题描述】:

我想知道是否有人可以帮助阐明为什么这个 PHP 代码没有进入 for 循环?在 MySQL 中,查询返回我需要的适当行,但在这个 PHP 文件中,它无法将任何内容返回到数组中,因此不执行 foreach 循环。

代码

<?php

  try {
  $sql = 'SELECT FirstName,LastName ';
  $sql .= 'FROM adventureworks.employeedepartmenthistory ';
  $sql .= 'JOIN employee USING(EmployeeID) ';
  $sql .= 'JOIN contact USING(ContactID) ';
  $sql .= 'WHERE DepartmentID = 2';
  $stmt = $dbh->prepare($sql);
  $stmt->execute();
  echo $sql;
  echo '<ul>';

     foreach ($stmt->fetchAll() as $emps){
     echo "<li>" . $emps["FirstName"] . $emps["LastName"] . "</li>";
  }

  echo '</ul>';

  $stmt = null;
}
catch (Exception $e) {
  echo "Error";
  echo $e->getMessage();
}


?>

我什至让程序回显 SQL 查询,然后将其复制到 MySQL 中,它仍然有效。这可能是一个简单的语法错误,还是我正在执行的表连接?

我还确定程序正在正确地联系数据库,因为我有其他类似的 PHP 文件像这个一样正常工作:

<?php

try {
  $sql  = 'SELECT department.Name FROM adventureworks.department';
  $stmt = $dbh->prepare($sql);
  $stmt->execute();

  echo '<ul>';

  foreach ($stmt->fetchAll() as $depts) {
     echo "<li>" . $depts["Name"]  . "     ->  ("  .
     "<a href='deptEmps.php?deptID=" . $depts['deptID']
     . "'>Employees </a>)" . "</li>\n";
  }

  echo '</ul>';

  $stmt = null;
}
catch (Exception $e) {
  echo "Error";
  echo $e->getMessage();
}


?>

【问题讨论】:

  • error_reporting(E_ALL); ini_set('display_errors', '1');
  • ...和php.net/manual/en/pdo.error-handling.php 然后编辑您的帖子以包含错误(如果有)。
  • 感谢您的评论,尽管 PHP 不认为这是一个错误。它只是运行查询而不接收行作为返回。我不相信错误处理会查明这一点
  • @AbraCadaver 那 ^ 我相信是给你的 ;-)
  • @DaveDiienno “我不相信错误处理会查明这一点” - 你觉得呢?我在这里看不到错误处理/检查。你在盲目地编码并且认为一切正常。

标签: php mysql for-loop syntax


【解决方案1】:

PHP 脚本的问题在于我没有指定要从哪些表中进行选择。这比它应该的更难,因为上面的语法在我正在访问的数据库中返回了 MySQL 中的数据,可以在下面找到正确的 PHP 脚本:

工作 PHP:

<?php

try {
$sql = 'SELECT contact.FirstName,contact.LastName ';
$sql .= 'FROM adventureworks.employeedepartmenthistory ';
$sql .= 'JOIN adventureworks.employee USING(EmployeeID) ';
$sql .= 'JOIN adventureworks.contact USING(ContactID) ';
$sql .= 'WHERE DepartmentID = 2';
$stmt = $dbh->prepare($sql);
$stmt->execute();
echo $sql;
echo '<ul>';

 foreach ($stmt->fetchAll() as $emps){
 echo "<li>" . $emps["FirstName"] . $emps["LastName"] . "</li>";
}

echo '</ul>';

$stmt = null;
}
catch (Exception $e) {
echo "Error";
echo $e->getMessage();
}


?>

我错了,这些表在 PHP 中是通过 JOIN 假设的,就像在 MySQL 中一样。

【讨论】:

    猜你喜欢
    • 2014-01-16
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 2018-07-30
    • 1970-01-01
    • 1970-01-01
    • 2014-02-02
    相关资源
    最近更新 更多