【问题标题】:Combine three arrays into one for insertion mysql将三个数组合二为一用于插入mysql
【发布时间】:2014-06-25 10:06:01
【问题描述】:

我已经束手无策了。我有一个页面应该将几个数组插入数据库。我正在尝试组合数组并插入它们。我没有成功地将它们结合起来。 也许它们甚至不必组合,只需插入一个空数据库即可。 它们都有相同的键,我将列出 3 个:

我有:

$reference_array contains:
(
[2815] => ref1
[2818] => ref2
[2835] => ref3
)

$ean_array contains:
(
[2815] => 6876876873
[2818] => 0097789783
[2835] => 0907678989
)

$price_array contains:
Array 
(
[2815] => 63.83
[2818] => 80.92
[2835] => 23.05
)

对于一个数组,我使用explode() 和正确的格式来插入Mysql,但我不能以如下方式格式化多个数组以进行插入。我尝试在 3 个不同的查询中插入,但得知数据已附加到数据库中。

$sql = "INSERT INTO data (Reference,EAN,Price) VALUES (the-reference-array,the-ean-array,theprice-array,etc,etc )";

感觉看起来很简单,大概就是这样。但现在不适合我:-/

我使用过类似的东西:

$merged = array_combine(array_keys($reference),$reference);
$merged1 = $merged + array_combine($merged,$ean_array);

如何组合这些数组和/或进行插入查询,以便所有数组都“对齐”以使用相同的键?所有数组的长度始终相同。

【问题讨论】:

  • 您的数据库架构是什么样的?如果我们不知道它们需要采用什么格式,我们很难为您提供帮助
  • 我省略了数据库方案以保持简短。但它是 ID INT 11, Reference VARCHAR 255 ,EAN INT 11, Price VARCHAR (for now)

标签: php mysql sql arrays


【解决方案1】:

假设所有三个数组始终具有完全相同的键,您可以执行以下操作:

foreach (array_keys($price_array) as $key) {
    $reference = $reference_array[$key];
    $ean = $ean_array[$key];
    $price = $price_array[$key];

    mysql_query("INSERT INTO data (Reference, EAN, Price) VALUES ('$reference', '$ean', $price)");
}

最好使用prepared statement。那看起来像

$mysqli = new mysqli("example.com", "user", "password", "database");
$statement = $mysqli->prepare("INSERT INTO data (Reference, EAN, Price) VALUES (?, ?, ?)")

foreach (array_keys($price_array) as $key) {
    $statement->bind_param("ssd", $reference_array[$key], $ean_array[$key], $price_array[$key]);
    $statement->execute()
}

已编辑:将三个 bind_param 调用合并为一个。谢谢,@kingkero!

【讨论】:

  • 我的错,修好了。感谢您的关注。
  • 顺便说一句,你可以使用foreach ($price_array as $key => $price) { ... }
  • 我知道,但是因为无论如何我都需要使用$key 来获取其他值,所以我认为以类似的方式获取所有值可能会很好。
  • @KaarelNummert 你可以通过设置"ssd"来缩短bind_param(),节省2个多余的行;)
【解决方案2】:

你可以试试这个:

$sql = "INSERT INTO data (Reference,EAN,Price) VALUES ";
$comma = "";
foreach(array_keys($reference_array) as $key) {
  $sql.= $comma."('".$reference_array[$key]."', '".$ean_array[$key]."', '".$price_array[$key]."')";
  $comma = ", ";
}

【讨论】:

    猜你喜欢
    • 2014-01-12
    • 1970-01-01
    • 2016-11-05
    • 2017-10-12
    • 2013-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多