php绑定动态批量插入查询的变量数

时间:2016-01-25 09:31:19

标签: php mysql mysqli prepared-statement bulkinsert

我有一个网络服务,用户会在其中传递动态数量的问题。

在php方面,我正在使用爆炸?删除每个问题。然后我需要进行批量插入。

到目前为止,我所做的工作如下:

if (!empty($checkInInsertQuery)) {
        $checkInSql .= implode(', ', $checkInInsertQuery);
        $stmt = $db->prepare($checkInSql);
        $stmt->execute($checkInData);
    }

基于另一个类似的例子,以下是如何用pdo完成它:

mysqli_stmt_bind_param($stmt, "is", $geofenceID, $question);
mysqli_stmt_execute($stmt);

我不确定如何在我的情况下绑定参数。我使用程序绑定。我通常会绑定参数:

$bindVar = '';

for ($i = 0; $i < count($checkInQs); $i++){
    $bindVar .= "is";
}

我认为类型部分很简单:

parse_dates=[1]

但不是我不确定如何管理其他数据的传递?

1 个答案:

答案 0 :(得分:0)

最后,我选择使用事务,提交和回滚来获得我期望的结果:

mysqli_query($con, "start transaction;");

$allQueriesOK = true;
$checkInQs = explode("?", trim($_POST['checkInQs'], "?"));
$checkInSql = "INSERT INTO CheckListQuestions (ID, GeofenceID, type, question) VALUES ('',?,0,?)";
mysqli_stmt_prepare($stmt, $checkInSql);

foreach ($checkInQs as $q) {            
    mysqli_stmt_bind_param($stmt, "is", $geofenceID, $q);
        if (!mysqli_stmt_execute($stmt)){
            $allQueriesOK = false;
            $message = mysqli_error($con);
            break;
        }
    }

    mysqli_stmt_close($stmt);

    if ($allQueriesOK){
        mysqli_query($con, "commit;");
    }
    else{
        mysqli_rollback($con);
    }