我有一个预订系统,需要将详细信息插入 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/