+-
php-for循环内有多个mysql查询
希望有人可以解决这个困扰我多年的疯狂问题.我是 mysql / php的新手.

我有一个数组[$Booklist],该数组由一系列数字组成,这些数字引用Books表中的BookID.然后,我查询数据库以获取与每个ID相关的详细信息:

for($s=0;$s<$smax+1;$s++){
  $sql="SELECT * FROM Books WHERE BookID = '$Booklist[$s]' ";
  $result=mysql_query($sql) or exit();

  while($row = mysql_fetch_array($result))
   {
    $Title[$s]=$row['Title'];
    $Author[$s]=$row['Author'];
    $Publisher[$s]=$row['Publisher'];
    $Year[$s]=$row['Year'];
  }
}

这很好.但是我从不喜欢从php for loop运行多个查询.

重要的是,允许$Booklist数组中有重复的BookID.并且必须保留$Booklist数组中ID的顺序(以及重复项),以便$Title和$Author数组的内容具有正确的顺序,包括重复项.希望有道理!

我尝试这样做:

$sql="SELECT * FROM Books WHERE BookID IN ('".join("','", $Booklist)."') 
ORDER BY FIELD(BookID, '".join("','", $Booklist)."')";
$s=0;
  while($row = mysql_fetch_array($result))
   {
    $Title[$s]=$row['Title'];
    $Author[$s]=$row['Author'];
    $Publisher[$s]=$row['Publisher'];
    $Year[$s]=$row['Year'];
    $s++;
  }

但这意味着$Booklist中的所有重复项都不会在$Title,$Author等中进行镜像,因此我将其废弃.

我的问题是-for循环内的mysql查询是否有更好的解决方案?或者,从for循环运行多个mysql查询是否存在问题??? -坚持下去更简单吗?

谢谢!

最佳答案
我认为您需要的是以下内容.它执行一个查询,然后根据查询返回的数据创建4个数组,同时将$booklist变量用于订单:

$sql = "SELECT * FROM Books WHERE BookID IN ('".join("','", array_map('mysqli_real_escape_string',$Booklist))."')";
$result = mysqli_query($sql) or exit();
$rows   = array();
while ($row = mysqli_fetch_array($result)) {
    $rows[$row['BookId']] = $row;
}

$i = 0;
foreach ($Booklist as $bookId) {
    if (isset($rows[$bookId])) {
        $Title[$i]     = $rows[$bookId]['Title'];
        $Author[$i]    = $rows[$bookId]['Author'];
        $Publisher[$i] = $rows[$bookId]['Publisher'];
        $Year[$i]      = $rows[$bookId]['Year'];
        $i++;
    }
}

还要注意,我添加了mysqli_real_escape_string来防止SQL注入

点击查看更多相关文章

转载注明原文:php-for循环内有多个mysql查询 - 乐贴网