PHP FetchAll()不返回行

时间:2017-07-26 18:58:24

标签: php mysql for-loop syntax

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

CODE

<?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();
}


?>

1 个答案:

答案 0 :(得分:0)

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中。