2009-11-29 115 views
1

Im卡住了,一直试图找出现在2个小时。我已经找到了foreach循环,但不知道如何现在插入数据。使用foreach数组插入多行到mysql使用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($_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); 

回答

2

几件事情错在这里:

  1. 你错过了你的价值观清单上的开口支架(VALUES后)
  2. 您在foreach的每次迭代运行mysql_query。相反,您可能希望先构建字符串(使用多个值列表),然后在循环外部运行mysql_query
  3. 不能将$_POST['project_id']变量插入到字符串中
  4. 在将数据放入数据库之前,您需要先将其转义$_POST
  5. 您实际上并未在您的查询中使用您的foreach中的$key$value,您只是放弃它。
  6. 循环内部的变量($thumb_path等)对于循环—的每次迭代都是相同的,因此您每次都要插入相同的数据。
  7. 循环的逻辑没有意义。你不知道$_POST是多久,或者它可能是什么,所以你为什么要循环$_POST

一些提示,以帮助您解决这一切:

  1. 检查您的错误日志。
  2. var_dump在执行查询以检查它在语法上和逻辑上是否正确之前,SQL的字符串。

如果您想进一步的帮助,我建议你var_dump什么是$_POST,尝试写一些你认为应该查询看起来像,然后张贴都在这里。那么也许有人会帮助你从一个走向另一个。

+0

这是应该如何设置? ($ _ POST作为$ key => $ value){ $ query =“INSERT INTO $ query。=“$ value [thumb_path],$ value [$ image_path],$ value [$ main_image],'$ _POST [project_id'])”; } $ result = mysql_query($ query,$ connection); – jrutter 2009-11-29 22:34:31

0

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

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

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); 
} 
+0

感谢您的帮助,这似乎工作,但价值观没有被拉出。相反,它将所有内容都作为“数组”存储在数据库中。任何想法如何解决这个问题? – jrutter 2009-11-29 23:05:01

0

,我觉得这样的事情要容易得多维护比重复字符串连接,你正在做的:

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