如何在准备好的语句php中的不同行中插入多条记录

Posted

技术标签:

【中文标题】如何在准备好的语句php中的不同行中插入多条记录【英文标题】:How to insert multiple records in different rows in prepared statement php 【发布时间】:2018-12-13 01:50:53 【问题描述】:

我已经在一个表中插入了一些带有值的字符串,让我们在我的数据库中将其称为table_1,现在我有一些数组,我想将它们插入到我的 SQL 数据库中table_2 的单独行中。

$sql = 'INSERT INTO ' . $table_1 . '(shipping_fee, waybill_status, pickup_fee, ) 
        VALUES(:shipping_fee, :waybill_status, :pickup_fee)';

$stmt = $this->dbConn->prepare($sql);
$stmt->bindParam(':shipping_fee', $s_shipping_fee);
$stmt->bindParam(':waybill_status', $s_waybill_status);
$stmt->bindParam(':pickup_fee', $this->pickup_fee);

if($stmt->execute()) //THIS INSERTED THE STRINGS PERFECTLY
    //NOW ALL VALUES TO BE INSERT INTO $sqal is an array

    $sqal = 'INSERT INTO ' . $table_2. '(id, waybill_number, client_id, item_name, item_weight, item_length, item_width, item_category, date_added) VALUES(null, :waybill_numberr, :client_idaa, :item_name, :item_weight, :item_length, :item_width, :item_category, :date_added)';

    $stmtaaa = $this->dbConn->prepare($sqal);
    $stmtaaa->bindParam(':item_name', $this->item_name); //ARRAY
    $stmtaaa->bindParam(':item_weight', $this->item_weight); //ARRAY
    $stmtaaa->bindParam(':item_length', $this->item_length); //ARRAY
    $stmtaaa->bindParam(':item_width', $this->item_width); //ARRAY
    $stmtaaa->bindParam(':item_category', $this->item_category); //ARRAY

    $stmtaaa->execute(); //HoW do I go about this.
 else 
    echo "Could not insert";
    exit();

【问题讨论】:

您是在问如何绑定和执行数组而不是字符串? 这些数组如何索引 - 从 0 到 n 编号? @qirel 是的,这个问题。 @qirel 我已经绑定了第一个准备好的执行语句 @qirel,是的,当我执行 print_r(item_name) 时,数组从 0 开始向上 【参考方案1】:

您在第一个查询中出现语法错误,结尾的逗号 , 不应出现在列或值列表中。

您可以通过使用不同的值多次执行准备来插入一个数组。此示例假定您的所有数组都按数字(从零开始)进行索引。

上面的代码示例还绑定了比绑定更多的列,因此您需要为每列绑定一个值。 waybill_numberrclient_idaadate_added 缺少绑定(我只是添加了一些随机占位符)。

$sql = "INSERT INTO $table_1 (shipping_fee, waybill_status, pickup_fee) 
        VALUES (:shipping_fee, :waybill_status, :pickup_fee)";

$stmt = $this->dbConn->prepare($sql);
$stmt->bindParam(':shipping_fee', $s_shipping_fee);
$stmt->bindParam(':waybill_status', $s_waybill_status);
$stmt->bindParam(':pickup_fee', $this->pickup_fee);

if ($stmt->execute()) 
    $sqal = "INSERT INTO $table_2 (id, waybill_number, client_id, item_name, item_weight, item_length, item_width, item_category, date_added) 
             VALUES (null, :waybill_numberr, :client_idaa, :item_name, :item_weight, :item_length, :item_width, :item_category, :date_added)";

    $stmtaaa = $this->dbConn->prepare($sqal);

    foreach ($this->item_weight as $key => $value) 
        $stmtaaa->execute(["waybill_numberr" => '1',   // Change this to your actual value
                           "client_idaa" => '1',       // Change this to your actual value
                           "item_name" => $value, 
                           "item_weight" => $this->item_weight[$key],
                           "item_length" => $this->item_length[$key],
                           "item_width" => $this->item_width[$key],
                           "item_category" => $this->item_category[$key],
                           "date_added" => '1']);
    
 else 
    echo "Could not insert";
    exit();

【讨论】:

以上是关于如何在准备好的语句php中的不同行中插入多条记录的主要内容,如果未能解决你的问题,请参考以下文章

如何将信息行插入mysql数据库中的不同行?

Oracle中如何用一条insert into 语句插入多条数据 如: insert into 表 values(多条数据)????????

是否可以使用单个准备好的语句插入填充类型为 set<text> 的列的记录?

INSERT INTO 语句中的语法错误(将多条记录从 Gridview 插入到 Access)

在 SQLite3 和 PHP 中使用准备好的语句

如何使用准备好的语句将表单数据插入 PDO?