将数组存储在 MySQL 中的多行中

Store an array in multiple rows in 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() 的图像:

你应该这样做:

• 首先,prepare 语句 一次,? 占位符,就像您现在所做的那样。分别准备您需要的每条声明。

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

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

• 最后,COMMIT

• 现在,使用try{} 块来catch 循环期间可能出现的任何错误。如果发生这种情况,ROLLBACK 事务而不是提交它。


"SQL 事务",如此处所示,使整个更新 原子化。 没有人会看到更改 你正在制作它们。相反,当您提交时,他们会看到整个更改“立即”发生。然而,如果交易被回滚,“什么都没有发生”。 (另外,在大多数系统中,事务使这些操作相当更有效率......)