如何在准备好的语句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_numberr
、client_idaa
和 date_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中的不同行中插入多条记录的主要内容,如果未能解决你的问题,请参考以下文章
Oracle中如何用一条insert into 语句插入多条数据 如: insert into 表 values(多条数据)????????
是否可以使用单个准备好的语句插入填充类型为 set<text> 的列的记录?