在MySQL中将数组存储为多行

问题描述

我只是想使用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);
    }
}
?>

与printr()一起使用的图像:

image of use with printr()

解决方法

您应该这样做:

•首先,像现在一样,用prepare个占位符?一次 。单独准备您需要的每个语句。

•现在,在开始循环之前,BEGIN TRANSACTION

•接下来,遍历循环,每次使用适当的占位符值执行准备好的语句。

•最后,COMMIT

•现在,使用try{}catch循环期间可能发生的任何错误。如果发生这种情况,请ROLLBACK进行交易,而不要提交。


如下所示,

“ SQL事务”使整个更新成为原子的。在进行修改的过程中,没有人会看到 的更改。相反,当您提交时,他们将看到整个更改“一次全部”发生。而如果将交易回滚,则“什么也没有发生”。 (此外,在大多数系统中,交易使这些操作相当更加有效...)