使用foreach数组使用php将多行插入mysql
Posted
技术标签:
【中文标题】使用foreach数组使用php将多行插入mysql【英文标题】:Insert multiple rows into mysql with php using foreach arrays 【发布时间】:2010-12-21 11:30:01 【问题描述】:我被卡住了,现在已经尝试了 2 个小时。我已经弄清楚了foreach循环,但现在不知道如何插入数据。
这是我的 php,我做错了什么?
$query = "INSERT INTO images (thumb_path, image_path, main_image, project_id) VALUES ";
foreach($_POST as $key => $value)
$query .= "$thumb_path,$image_path,$main_image,$_POST[project_id])";
$result = mysql_query($query, $connection);
谢谢!
我应该这样布置吗,对不起,对于 foreach 还是一个新手以及它是如何工作的。
foreach($_POST as $key => $value)
$query = "INSERT INTO images VALUES (thumb_path, image_path, main_image, project_id),";
$query .= "$value[thumb_path], $value[$image_path], $value[$main_image], '$_POST[project_id'])";
$result = mysql_query($query, $connection);
【问题讨论】:
【参考方案1】:这里有几个问题:
-
值列表中缺少左括号(
VALUES
之后)
您在foreach
的每次迭代中都运行mysql_query
。相反,您可能希望先构建字符串(使用多个值列表),然后在循环外运行 mysql_query
。
您不能以这种方式将$_POST['project_id']
变量插入字符串
您需要在将$_POST
数据放入数据库之前对其进行转义!
您实际上并未在查询中使用 foreach 中的 $key
或 $value
,您只是将其丢弃。
循环内的变量($thumb_path
等)对于循环的每次迭代都是相同的,因此您每次都将插入相同的数据。
循环的逻辑没有意义。你不知道$_POST
有多长,也不知道其中可能包含什么,那么为什么要循环遍历$_POST
?
一些提示可以帮助您解决所有这些问题:
-
检查您的错误日志。
var_dump
执行查询前的SQL字符串,检查语法和逻辑是否正确。
如果您需要进一步的帮助,我建议您 var_dump
$_POST
中的内容,尝试编写您认为查询应该是什么样子,然后在此处发布两者。那么也许有人会帮助你从一个到另一个。
【讨论】:
应该这样设置吗? foreach($_POST as $key => $value) $query = "插入图像值 (thumb_path, image_path, main_image, project_id),"; $query .= "$value[thumb_path], $value[$image_path], $value[$main_image], '$_POST[project_id'])"; $result = mysql_query($query, $connection);【参考方案2】:我发现这样的事情比你正在做的重复字符串连接更容易维护:
$values = array();
foreach ($_POST as $key => $value)
$qvalue = mysql_real_escape_string($value);
$values[] = "($field1, $field2, $field3, $qvalue)"; // quoted value, not the raw value
$query_values = implode(',', $values);
$query = "INSERT INTO images (field1, field2, field3, field4) VALUES $query_values";
$result = mysql_query($query, $connection);
请记住,在构建这样的查询时,完全有可能构建一个足够大的查询,除了 max_packet 长度,在这种情况下,您必须将插入拆分为多个较小的查询。
【讨论】:
【参考方案3】:首先,使用 mysql_real_esape_string 转义 $_POST[project_id]。
那么,syntax 就是 INSERT INTO table VALUES ( ... ), ( ... )
【讨论】:
【参考方案4】:// escape your input
$_POST = array_map('addslashes', $_POST);
// rather than recursively calling mysql_query, you can insert all your rows with one query
// INSERT INTO table (columns) VALUES (data), (data), (data), ...
$values = array();
foreach($_POST as $key => $value)
$values[] = "('$_POST['thumb_path']', '$_POST['image_path']', '$_POST['main_image']', '$_POST['project_id']')";
if(sizeof($values))
$query = "INSERT INTO images (thumb_path, image_path, main_image, project_id) VALUES ".implode(',', $values);
$result = mysql_query($query, $connection);
【讨论】:
感谢您的帮助,这似乎有效,但值没有被拉出。相反,它将所有内容作为“数组”存储在数据库中。有什么想法可以解决这个问题吗?以上是关于使用foreach数组使用php将多行插入mysql的主要内容,如果未能解决你的问题,请参考以下文章