我陷入困境,现在试图弄清楚这个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);
答案 0 :(得分:2)
这里有些问题:
VALUES
之后)mysql_query
的每次迭代中都在运行foreach
。相反,您可能希望首先构建字符串(使用多个值列表),然后在循环外运行mysql_query
。$_POST['project_id']
变量插入字符串$_POST
数据!$key
或$value
,而只是放弃它。$thumb_path
等)对于循环的每次迭代都是相同的 - 所以你每次都要插入相同的数据。$_POST
有多长,或者可能有多长,所以为什么要循环$_POST
?一些提示可以帮助您解决所有问题:
var_dump
执行查询之前的SQL字符串,以检查它是否在语法和逻辑上都是正确的。如果您需要进一步的帮助,我建议您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);
}