我有以下代码:
if (count($sales) > 0) {
foreach ($sales as $sale) {
//Generate variables
$user_id = $_SESSION['user_id'];
$sales_id = $sale['sales_id'];
$product = $sale['product'];
$quantity = $sale['quantity'];
$default_printed = 0;
$datetime = $_SESSION['session_date']." ".date('G:i:s');
echo $sales_id.", ".$product.", ".$quantity.", ".$user_id."<br />";
if ($stmt = $mysqli->prepare("INSERT INTO sales (uid,product,printed,saledatetime,jpgID,quantity) VALUES (?,?,?,?,?,?)")) {
$stmt->bind_param('isisii',$user_id,$product,$default_printed,$datetime,$sales_id,$quantity);
$stmt->execute();
$stmt->close();
}
}
}
它应该可以工作,但由于某种原因,它只会在数据库中第一次运行时添加...回声产生以下内容,只是为了证明数组实际上是循环的。
83, KR, 2, 2
84, KR, 1, 2
84, LR, 1, 2
85, KR, 1, 2
86, LR, 2, 2
87, KR, 1, 2
87, LR, 3, 2
89, KR, 2, 2
为什么在后续运行中没有将值添加到数据库中?
答案 0 :(得分:1)
不要关闭循环内的语句和连接,在完成所有执行后关闭它。你也不需要在循环中“准备”语句。整个想法是你在循环外准备()语句,然后在循环内你只传递值到execute(),一旦循环完成,你关闭()循环:
if (count($sales) > 0) {
foreach ($sales as $sale) {
//Generate variables
$user_id = $_SESSION['user_id'];
$sales_id = $sale['sales_id'];
$product = $sale['product'];
$quantity = $sale['quantity'];
$default_printed = 0;
$datetime = $_SESSION['session_date']." ".date('G:i:s');
echo $sales_id.", ".$product.", ".$quantity.", ".$user_id."<br />";
if ($stmt = $mysqli->prepare("INSERT INTO sales (uid,product,printed,saledatetime,jpgID,quantity) VALUES (?,?,?,?,?,?)")) {
$stmt->bind_param('isisii',$user_id,$product,$default_printed,$datetime,$sales_id,$quantity);
$stmt->execute();
}
}
$stmt->close(); //move close() here
}
答案 1 :(得分:1)
可能后续的insert语句失败,因为数据库约束会阻止插入数据。你是否尝试过一个接一个地“手动”执行这些陈述?
答案 2 :(得分:0)
刚刚检查了数据库,我必须忘记将ID(主键)更改为AUTO_INCREMENT,因此它只是被覆盖了。
干杯!