【问题标题】:Insert array into MySQL database from form从表单将数组插入 MySQL 数据库
【发布时间】:2021-01-12 14:01:31
【问题描述】:

我尝试将数组数据从表单插入到我的数据库中,但只得到最后一行:

我想将这些数组插入数据库:

ProductID Quantity
2            10
3            5
4            8

但我在我的数据库中只看到这些数据:

ProductID Quantity
4            8

请参阅下面的代码:

define('DB_SERVER','localhost');
define('DB_USER','root');
define('DB_PASS' ,'');
define('DB_NAME','store');
$con = mysqli_connect(DB_SERVER,DB_USER,DB_PASS,DB_NAME);
// Check connection
if (mysqli_connect_errno())
{
 echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$productID=$_POST['product_id'];
$IssueQty=$_POST['quantity'];

$inventory=mysqli_query($con,"insert into inventory_log(productID, IssueQty)
values('$productID', '$IssueQty')");

【问题讨论】:

  • 您只插入一组行,那么您如何期望数据库显示 3 行?
  • 可以插入一行吗?如果是这样,你能在一个循环中运行完全相同的代码吗?
  • 使用 foreach , foreach ($_POST as $key => $value)
  • 警告:您对SQL Injections 持开放态度,应该使用参数化的prepared statements,而不是手动构建查询。它们由PDOMySQLi 提供。永远不要相信任何形式的输入!即使您的查询仅由受信任的用户执行,you are still in risk of corrupting your dataEscaping is not enough!

标签: php arrays mysqli insert


【解决方案1】:

多个INSERT的例子:

$statement = $con->prepare("INSERT INTO inventory_log (productID, IssueQty)
VALUES (?,?)");
foreach ($_POST as $row) {
    $statement->bind_param($row['product_id'],$row['quantity']);
    $statement->execute();
}

【讨论】:

  • 感谢 mPareek 的帮助。只是想知道如何替换它:(?,?)
  • 替换(?,?)是什么意思?这些是占位符,这就是 SQL 的样子。您必须在循环内绑定参数
  • 你不需要更换它。它们将自动替换为bind_param()。这称为准备好的语句,是一种更安全的查询编写方式。看到这个mysqli_prepare
猜你喜欢
  • 2013-11-30
  • 1970-01-01
  • 2019-01-12
  • 1970-01-01
  • 1970-01-01
  • 2016-08-26
  • 2011-07-05
  • 1970-01-01
相关资源
最近更新 更多