将两个数组插入一个mysql行
Posted
技术标签:
【中文标题】将两个数组插入一个mysql行【英文标题】:Insert two arrays into one mysql row 【发布时间】:2012-04-22 08:55:59 【问题描述】:我有两个数组:
name - facebook,google,yahoo
url - facebook.com,google.com,yahoo.com
在我的数据库中,我有一个表 (tbl_websites)。 结构:id、site_name、site_url
我想将这两个数组中的数据插入到该表的一行中。
示例: (第 1 行)
id : 1
site_name : facebook
site_url : facebook.com
(第 2 行)
id : 2
site_name : google
site_url : google.com
(第 3 行)
id : 3
site_name : yahoo
site_url : yahoo.com
我该怎么做?
任何帮助将不胜感激。
【问题讨论】:
那是一排的反面……那是三排。 【参考方案1】:假设数组之间存在直接的 1:1 匹配,您可以简单地循环其中一个,如下所示:
foreach ($name as $key => $value)
$name_value = mysql_real_escape_string($value);
$url_value = mysql_real_escape_string($url[$key]);
// Addendum: If there was a third array, just use `$key` as the array key
// same as done with $url[$key]
$thrid_value = mysql_real_escape_string($third_arr[$key]);
$result = mysql_query("INSERT INTO tbl_websites (site_name, site_url, third_value) VALUES ('$name_value', '$url_value', '$third_value')");
这假定id
是一个自动增量值。为了简单起见,我在这里使用了mysql_query()
函数。但建议通过类似 PDO 的 api 使用准备好的语句。从数组中检索它们的过程是相同的。
PDO 版本(假设已在$db
中建立连接):
foreach ($name as $key => $value)
$stmt = $db->prepare("INSERT INTO tbl_websites (site_name, site_url) VALUES (:name, :url)");
$stmt->execute(array(':name' => $name_value, ':url' => $url_value));
上面的代码不包括任何错误检查。阅读PDO manual 以获取有关使用 PDO 语句进行错误检查的示例。可以通过 try/catch
异常块或 php 警告来完成。
【讨论】:
如果它来自三个不同的数组呢?我需要做哪些调整? @Michael 如果它来自三个不同的数组呢?我需要做哪些调整? @mackynyxzz 我在上面加了一点。如果有第三个数组,只需使用$third_array[$key]
使用$key
作为数组键是重要的部分。
非常感谢。这真的有效。我真的很感谢你的帮助。 :)【参考方案2】:
你可以做一个查询(更好的性能):
$values = array_map(function($name, $url)
return "('$name', '$url')";
, array_map('mysql_real_escape_string', $name), array_map('mysql_real_escape_string', $url));
mysql_query("INSERT INTO `tbl_websites` (`site_name`, `site_url`) VALUES " . implode(' ', $values));
【讨论】:
抱歉,第二个数组命名错误。现在应该没事了。以上是关于将两个数组插入一个mysql行的主要内容,如果未能解决你的问题,请参考以下文章