您的代码中有两个基本缺陷。
首先,您尝试在字符串中使用 echo ,但这不起作用。要么打印出文本,然后使用echo
,要么使用连接字符串.
其次,您正在混合 MySQLUPDATE
和INSERT
语法。
您正在尝试这样做:
INSERT INTO tablename SET field=value,field2=value2;
这是 的语法UPDATE
:
UPDATE tablename SET field=value,field2=value2;
如果你想使用INSERT
,你必须这样做:
INSERT INTO tablename (field1,field2) VALUES (value1,value2)
您可以使用数组和内爆很容易地生成括号内的部分:
$fields = array();
$values = array();
$fieldcount = 1;
while ($fieldcount<=10) {
$fields[] = $field.$i;
$values[] = $_REQUEST[$field.$i];
}
这将生成两个数组,一个包含所有字段名称,一个包含所有值。现在我们可以将它们转换为可用的字符串:
$all_fields = implode(",", $fields);
$all_values = implode("','", $values);
字符串现在将包含:
"field1,field2"
"value1','value2"
''
(故意缺少第二个字符串中的封闭)
现在您可以将这些字符串添加到您的查询中
$query = "INSERT INTO (" . $all_fields . ") VALUES ('" . $all_values . "')";
此生成的查询字符串将如下所示:
"INSERT INTO (field1,field2) VALUES ('value1','value2')"
这可以直接与 mysql_query 一起使用。
但是:正如已经指出的那样,这一切都已弃用,您应该直接从新方式开始。
我们将保留数组的部分,它们对于准备好的语句仍然很有用。
$fields = array();
$values = array();
$placeholders = array();
$fieldcount = 1;
while ($fieldcount<=10) {
$fields[] = $field.$i;
$values[] = $_REQUEST[$field.$i];
$placeholders[] = "?";
}
现在我们再次需要一些字符串
$all_fields = implode(',', $fields); // resulting in "field1,field2" again
$all_placeholders = implode(',', $placeholders); // results in: "?,?"
现在我们创建查询字符串:
$query = "INSERT INTO (" . $all_fields . ") VALUES (" . $all_placeholders . ")"
导致:
"INSERT INTO (field1,field2) VALUES (?,?)"
现在我们创建语句并使用实际值执行它
$stmt = $conn->prepare($query); // assuming $conn is a valid DBO connection. mysqli is similar
$stmt->execute($values);
这将执行准备好的语句,将$values
数组中的所有值放在?
占位符中。
(注意:我没有检查 $field.$i 是否真的生成了可用的变量名,它只是从您的代码中复制和粘贴)