问题描述
我只是想使用MysqL数据库将数组存储在多行中。不幸的是,它只保存了最后一个值。
<?PHP
session_start();
require_once "../PHPquery/dbconnection.PHP";
$testings = $_POST["testings"];
$presid = $_POST["presid"];
$lab_status = "0";
$patient_status = "1";
$update_status = "0";
foreach( $testings as $testing) {
if($stmt = MysqLi_prepare($con,"INSERT INTO testing_schedule
(p_id,pres_id,testing_perform,submit_date,lab_status,patient_status,update_status)
VALUES ( ?,?,?)")){
$cur_date = date('Y-m-d');
MysqLi_stmt_bind_param($stmt,"sssssss",$_SESSION['p_id'],$presid,$testing,$cur_date,$lab_status,$patient_status,$update_status);
echo "Successfully saved";
} else{
echo "ERROR: Could not prepare query: $con. " . MysqLi_error($con);
}
}
?>
解决方法
您应该这样做:
•首先,像现在一样,用prepare
个占位符?
一次 。单独准备您需要的每个语句。
•现在,在开始循环之前,BEGIN TRANSACTION
。
•接下来,遍历循环,每次使用适当的占位符值执行准备好的语句。
•最后,COMMIT
。
•现在,使用try{}
块catch
循环期间可能发生的任何错误。如果发生这种情况,请ROLLBACK
进行交易,而不要提交。
如下所示,
“ SQL事务”使整个更新成为原子的。在进行修改的过程中,没有人会看到 的更改。相反,当您提交时,他们将看到整个更改“一次全部”发生。而如果将交易回滚,则“什么也没有发生”。 (此外,在大多数系统中,交易使这些操作相当更加有效...)