使用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的主要内容,如果未能解决你的问题,请参考以下文章

php使用foreach将值插入数组数组

mysq

使用foreach从动态post数组插入sql

PHP / MYSQL 插入数组 Foreach 循环

从包含数组的 foreach PHP 插入数据

PHP数组未向数据库插入多行