【问题标题】:mysqli query in WHILE loopWHILE 循环中的 mysqli 查询
【发布时间】:2013-07-01 16:44:31
【问题描述】:

1.) 可以在 while 循环中嵌套 msqli_query 吗?

2.) 如果是,为什么下面的 PHP 不会向 precords 表写入任何数据?

如果我回显一个 $build 数组变量,它会正确显示,但 mysqli 插入不会向数据库中的表写入任何内容。代码不会在任何地方出错,所以我错过了什么?

$data = mysqli_query($con,"SELECT * FROM Cart WHERE Buyer_ID='$_SESSION[cid]' AND Cart_Date='$_SESSION[cdate]'");
while($build = mysqli_fetch_array($data))
{ 
//echo $build[idex]."<br>";
mysqli_query($con,"INSERT INTO precords (precord,Buyer_ID,Account,Purchase_Date,Item_Number,Item_Qty,Item_Title,Item_FPrice,Item_FFLFlag,ccpass) VALUES ('$build[idex]','$build[Buyer_ID]','$build[Cart_Date]','$build[Item_Number]','$build[Item_Qty]','$build[Item_Title]','$build[Item_FPrice]','$build[Item_FFLFlag]','N')");
};

感谢您的帮助。

** - 此代码旨在将某些值从 TEMPORARY 表/会话变量移动到永久记录表,但需要循环,因为购物车中有多个产品与用户/会话关联。

【问题讨论】:

  • 是的,您可以循环执行此操作,但您不需要这样做。你的INSERT 只使用来自$build 的值,所以你可以做INSERT INTO precords SELECT col1,col2,col3... FROM Cart WHERE Buyer_ID=...
  • 它失败的原因有很多,其中最重要的一点是您没有转义 $build 中的值,这些值甚至是 not 插入安全的尽管它们来自数据库。你可能有语法错误。你应该检查mysqli_error() 看看出了什么问题,并最终考虑切换到 MySQLi 中的预处理语句。

标签: php mysqli while-loop


【解决方案1】:

当您想从数据库中获取数据以显示在 html 列表中时,我特意添加了 mysqli ORDER BY,它只有两个顺序 ASC [ascending]DESC[descending] 我还使用了 mysqli LIMIT,我将其设置为 3 意味着从数据库中获取的结果数应该只有三行

我同意 ali alomoulim 的回答 https://stackoverflow.com/users/2572853/ali-almoullim

MYSQLI ORDER BY AND LIMIT 时循环的简化代码

$usersQuery = "SELECT * FROM account ORDER BY acc_id DESC LIMIT 3";
$usersResult=mysqli_query($connect,$usersQuery);
while($rowUser = mysqli_fetch_array($usersResult)){ 
echo $rowUser["acc_fullname"]; 
}

【讨论】:

    【解决方案2】:

    是的,你可以循环使用它并且

    您可能想添加mysql_error() 函数以找出问题所在并尝试修复它,或者将错误添加到问题中,以便我们告诉您该怎么做

    $data = mysqli_query($con,"SELECT * FROM Cart WHERE Buyer_ID='$_SESSION[cid]' AND Cart_Date='$_SESSION[cdate]'");
    while($build = mysqli_fetch_array($data))
    { 
        // echo $build[idex]."<br>";
        mysqli_query($con,"INSERT INTO precords(precord,Buyer_ID,Account,Purchase_Date,Item_Number,Item_Qty,Item_Title,Item_FPrice,Item_FFLFlag,ccpass) 
                           VALUES ('$build[idex]','$build[Buyer_ID]','$build[Cart_Date]','$build[Item_Number]','$build[Item_Qty]','$build[Item_Title]','$build[Item_FPrice]','$build[Item_FFLFlag]','N')")
            or die (mysql_error());
    };
    

    【讨论】:

    • 添加了 mysql_error 但它不报告/显示错误 - 话虽如此,随后的代码块现在不起作用,因此 OR DIE 似乎正在被触发。我会尽力解决具体的错误
    • 因为这是mysqli 而不是mysql。你需要mysqli_error($con)
    • @MichaelBerkowski 我在发表评论后就发现了这一点。谢谢
    猜你喜欢
    • 2013-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-11
    • 1970-01-01
    • 2014-01-09
    • 2017-07-22
    • 1970-01-01
    相关资源
    最近更新 更多