如何在具有键值对数据数组的表中一次插入多行

问题描述 投票:0回答:2

我想将

array()
key
value
成对数据插入表中

<?php
$foreignKey = 2;
$array = array(
   'availability' => array(
       array('day' => 'monday','time' => 'am'),
       array('day' => 'wednesday','time' => 'pm'),    
   ),
);

我的空闲表 - 一开始

表:可用性

| id  |  foreign_id  |   day  |  time  |
+-----+--------------+--------+--------+

结果表:

| id  |  foreign_id  |   day    |  time  |
+-----+--------------+----------+--------+
|  1  |       2      | monday   |  am    |
+-----+--------------+----------+--------+
|  2  |       2      |wednesday |  pm    |
+-----+--------------+----------+--------+


$sql = "INSERT INTO availability ";
php mysql sql arrays sql-insert
2个回答
2
投票

您可以循环遍历数组并绑定并执行

$stmt->prepare("INSERT INTO availability (fld1, fld2) VALUES(?, ?)");
foreach($array as $row)
{
    $stmt->bind_param($row['fld1'], $row['fld2']);
    $stmt->execute();
}

0
投票

以下是如何使用 PHP 和准备好的语句将多行插入到可用性表中:

<?php
$foreignKey = 2;
$array = array(
    'availability' => array(
        array('day' => 'monday', 'time' => 'am'),
        array('day' => 'wednesday', 'time' => 'pm'),
    ),
);

// Database connection parameters
$servername = "your_servername";
$username = "your_username";
$password = "your_password";
$dbname = "your_dbname";

try {
    // Connect to database
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    // Set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // Prepare SQL statement
    $sql = "INSERT INTO availability (foreign_id, day, time) VALUES ";
    $values = array();

    foreach ($array['availability'] as $item) {
        $values[] = "(:foreign_id, :day, :time)";
    }

    $sql .= implode(", ", $values);

    $stmt = $conn->prepare($sql);

    // Bind parameters and execute the statement for each row
    foreach ($array['availability'] as $item) {
        $stmt->bindParam(':foreign_id', $foreignKey);
        $stmt->bindParam(':day', $item['day']);
        $stmt->bindParam(':time', $item['time']);
        $stmt->execute();
    }

    echo "Records inserted successfully";

} catch (PDOException $e) {
    echo "Error: " . $e->getMessage();
}

// Close connection
$conn = null;
?>

说明: 数据库连接:

将“your_servername”、“your_username”、“your_password”和“your_dbname”替换为您的实际数据库连接详细信息。 准备好的语句和 SQL 构造:

构建 SQL 查询的初始部分:INSERT INTO Availability (foreign_id, day, time) VALUES。 准备一个数组 $values 来存储要插入的每一行的占位符。 循环遍历数组数据:

遍历 $array['availability'] 中的每个元素。 对于每个元素,将 (:foreign_id, :day, :time) 添加到 $values 数组中。 准备并执行 SQL 语句:

使用$sql准备SQL语句。 使用 $conn->prepare($sql) 准备语句。 对于 $array['availability'] 中的每一行: 将参数(:foreign_id、:day、:time)与实际值绑定。 执行语句。 异常处理:

使用try-catch块来捕获数据库操作期间可能发生的任何异常。 如果抛出异常,它将被捕获并显示错误消息。 输出:

如果记录插入成功,会回显“记录插入成功”。 笔记: 此代码假设您使用 PDO 进行数据库操作,由于其安全性和易用性,这是 PHP 中数据库交互的良好实践。 确保将数据库连接参数($servername、$username、$password、$dbname)替换为您的实际数据库凭据。 foreach 循环用于将 $array['availability'] 数组中的每一行插入到数据库表中。

© www.soinside.com 2019 - 2024. All rights reserved.