使用foreach数组使用php将多行插入mysql

时间:2009-11-29 22:20:11

标签: php mysql arrays forms foreach

我陷入困境,现在试图弄清楚这个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);

4 个答案:

答案 0 :(得分:2)

这里有些问题:

  1. 您错过了值列表中的左括号(VALUES之后)
  2. 您在mysql_query的每次迭代中都在运行foreach。相反,您可能希望首先构建字符串(使用多个值列表),然后在循环外运行mysql_query
  3. 您无法以这种方式将$_POST['project_id']变量插入字符串
  4. 在将数据放入数据库之前,您需要转义$_POST数据!
  5. 您实际上并未在查询中使用foreach中的$key$value,而只是放弃它。
  6. 循环中的变量($thumb_path等)对于循环的每次迭代都是相同的 - 所以你每次都要插入相同的数据。
  7. 循环的逻辑没有意义。你不知道$_POST有多长,或者可能有多长,所以为什么要循环$_POST
  8. 一些提示可以帮助您解决所有问题:

    1. 检查错误日志。
    2. var_dump执行查询之前的SQL字符串,以检查它是否在语法和逻辑上都是正确的。
    3. 如果您需要进一步的帮助,我建议您var_dump $_POST中的内容,尝试编写您认为查询应该是什么样的内容,然后在此处发布。那么也许有人会帮助你从一个到另一个。

答案 1 :(得分:1)

我发现这样的东西比你正在做的重复字符串连接更容易维护:

$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长度,在这种情况下,您必须将插入分成多个较小的查询。

答案 2 :(得分:0)

首先,使用mysql_real_esape_string转义$ _POST [project_id]。

然后,syntax是INSERT INTO表VALUES(...),(...)

答案 3 :(得分:0)

// 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);
}