【问题标题】:MySQLi query in while loop not adding to databaseMySQLi在while循环中查询未添加到数据库
【发布时间】:2014-01-09 17:43:42
【问题描述】:

我有以下代码将用户的订单添加到数据库中。订单存储为一个数组 ($row),然后在 while 循环中将其设置为单个变量,然后将其设置为查询。不显示错误消息,但记录未添加到 MySQL 数据库。我已将我认为存在问题的区域以粗体表示。我查看了其他几个帮助线程并尝试了它们,但它们对此不起作用。

我对 PHP 还很陌生,所以请您尽量用简单的英语回答。 谢谢,如果有人可以帮我解决这个问题。

<?php

session_start();
?>


<?php



//db connect

require('connect_db.php');

//define variables

$id=$_SESSION['user_id'];
$fn=$_SESSION['first_name'];
$ln=$_SESSION['last_name'];
$bank=$_POST['bank'];
$ano=$_POST['account'];
$sort=$_POST['sort_code'];

//get order details
**$qa="SELECT total, product, quantity, FROM orders WHERE user_id='$id'";

$ra=mysqli_query($dbc, $qa);



while($row=mysqli_fetch_array($r, MYSQLI_ASSOC))
{
//insert to table
$product=$row['product'];
$quantity=$row['quantity'];
$total=$row['total'];
$qb="INSERT INTO order_contents(user_id, first_name, last_name, product, quantity, price, bank, account_no, sort_code) VALUES '$id', '$fn', '$ln', '$product', '$quantity', '$total', SHA1('$bank'), SHA1('$ano'), SHA1('$sort'))";

mysqli_query($dbc, $qb) or die(mysqli_error($dbc));
}**



//clear db

mysqli_query($dbc, "DELETE FROM orders WHERE user_id='$user_id'");


//mysql close

mysqli_close($dbc);


//redirect to thank you page

header("Location:http://emsworthsailspares.net23.net/thanks.php");


?>



<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>Untitled 1</title>
</head>

<body>
</body>

</html>

【问题讨论】:

  • 您不需要两次打开/关闭 php 标签。只需在 PHP 的开头执行
  • 你有一个错字。 $row = mysqli_fetch_array($r, MYSQLI_ASSOC) ) 应该是 $row = mysqli_fetch_array($ra, MYSQLI_ASSOC) )
  • 谢谢。进行了更改,将来会有用,但还没有解决问题
  • 谢谢戴夫。好像我有两件事出了问题,因为它仍然不起作用
  • 您确定您在 $qa 处的查询正在返回结果,并且 while() 循环正在执行某些操作吗?回显 $qb 的内容。如果直接在 MySQL 中使用,结果查询会运行吗?

标签: php mysql arrays mysqli while-loop


【解决方案1】:

最好使用单个 INSERT INTO ... SELECT FROM 查询,减少通过客户端往返所有内容的需要:

INSERT INTO order_contents (user_id, first_name, last_name, product, quantity, price, bank,
    account_no, sort_code)
SELECT '$id', '$fn', '$ln', product, quantity, total, SHA1('$bank'), SHA1('$ano'), SHA1('$sort')
FROM orders
WHERE user_id=$id

注意查询的选择部分中动态和“固定”字段类型的混合。

【讨论】:

    【解决方案2】:

    您将查询放入 $ra,然后尝试使用 $r

    $ra=mysqli_query($dbc, $qa);
    
    
    
    while($row=mysqli_fetch_array($ra, MYSQLI_ASSOC))
    

    【讨论】:

      【解决方案3】:

      while($row=mysqli_fetch_array($r, MYSQLI_ASSOC))

      您应该像上面的代码一样将 $r 更改为 $ra。

      while($row=mysqli_fetch_array($ra, MYSQLI_ASSOC))
      

      【讨论】:

        猜你喜欢
        • 2013-07-01
        • 2013-05-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多