php - 如何将数组的每个元素插入数据库?

标签 php mysql arrays

我有一个预订系统,需要将详细信息插入 mysql 数据库。我的所有变量都是字符串,其中之一是数组 - 因此我需要为每个数组元素($ticketnumber)插入相同的信息。我尝试过使用 foreach 循环来做到这一点,但它似乎不起作用。由于人们可能会选择购买不同数量的门票,因此如何仅使用一个 INSERT 语句来做到这一点?

这是部分代码:

<?php

$day = $_SESSION['date'];
$time = $_SESSION['time'];
$name = $_REQUEST['name'];
$ticketnumber = $_REQUEST['tickets']; //this is the array variable

foreach ($ticketnumber as $ticket){
    $sql = "INSERT INTO table VALUES ('$name', '$day', '$time', '$ticket');";
    $handle = $conn->prepare($sql);
    $handle->execute();

}
?>

在这种情况下,我的数组的值是(它根据您检查的票数而变化):

array(2) { [0]=> string(3) "010" [1]=> string(3) "011" }

这也与 $ticket 的值匹配,为什么会发生这种情况?

我的 session 和与数据库的连接是在此之前建立的。我还尝试用字符串替换数组变量,并且插入语句有效。

感谢任何帮助!

谢谢。

最佳答案

如果您像现在一样将值连接到 SQL 字符串中,那么使用准备好的语句并没有多大好处。相反,准备一个带有占位符的语句,并针对各种不同的值重复执行它。

创建参数数组

$params['day'] = $_SESSION['date'];
$params['time'] = $_SESSION['time'];
$params['name'] = $_REQUEST['name'];

使用将绑定(bind)您的值的占位符创建准备好的语句

$sql = "INSERT INTO table VALUES (:name, :day, :time, :ticket);";
$handle = $conn->prepare($sql);

$ticketnumber 中的每个值循环执行该语句。

$ticketnumber = $_REQUEST['tickets'];

foreach ($ticketnumber as $ticket) {
    $params['ticket'] = $ticket; // assign the current ticket to the array of values
    $handle->execute($params);   // the values are bound to the prepared statement
}

您实际上并不需要显式关闭或取消连接(尤其是不像其他人指出的那样在循环内部)。

关于php - 如何将数组的每个元素插入数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47518941/

相关文章:

php - MySQL更新行最高值加1

javascript - 如何获取这些创建的文本框的值?

java - 如何编写 Java 程序来对 Aurora MySQL 数据库进行身份验证?

python - 循环 scikit-learn 机器学习数据集

php - VI编辑器_将文件夹从Windows移动到Web服务器

php - 在 CentOS 6 上安装 php-mcrypt

mysql - 空的mysql_query,想不通

MySQL - 使用相同的 key 更新 sibling

c++ - 数组中连续元素的总和,C++

c - 从结构到数组的不完整复制