+-

希望有人可以解决这个困扰我多年的疯狂问题.我是 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查询 - 乐贴网