我是mySQL和PHP的新手。我有一个表,我希望更新与数组中的值。我想我正在制作语法错误。假设我的表字段是 Reg_no , Field1 , Field2 ...... 我正在使用:
$i=1;
$query=mysql_query("insert into tablename set
Reg_no = '".$common->html_protect($_REQUEST['reg_num'])."'
while(fieldcount<=10)
{
echo ",";
echo field.$i='".$common->html_protect($_REQUEST[$field.$i]) ."'
}
");
请提出任何建议!
答案 0 :(得分:0)
首先,据我所知,mysql_query
已被弃用。
尝试学习PDO。它更安全,我猜其他优点。
此外,您的示例是将写入 mysql查询,这可能是错误的。最后,您将拥有一个mysql查询,如:
insert into tablename set Reg_no = 'something' while(fieldcount<=10) { echo something else }
等。 ,这在MySQL中没有意义。 MySQL不会理解echo
是什么。
MySQL期望像"INSERT INTO tablename(fieldname) VALUES ('the_value')"
;
所以我猜你要做的是运行一个mysql查询,然后在屏幕上回显一下,就像这样:
$pdo->query("insert into tablename (field1,field2) values ('value1' , 'value2')");
while(fieldcount<=10)
{
echo "something";
}
请注意,如果你担心mysql注入,上面的例子也不安全。
所以,我的建议是,也要了解prepared statements。
如果要在循环中运行mysql查询,可以执行以下操作:
<?php
for($i=0 ; $i < 10 ; $i++)
{
$thefield = "field".$i; // construct your field name
$thevalue=$i; // construct your value. I guess this is where your $_REQUEST variables go.
$pdo->query("insert into tablename($thefield) VALUES('$thevalue')"); // then run the necessary mysql query.
echo "i inserted $thevalue for the field $thefield";
}
// and of course, for this case, you may not need a loop. You can insert multiple values at once, like this:
$pdo->query("insert into tablename (field1,field2,and_any_other_field) values ('value1' , 'value2' , 'value_for_other_field')"); // etc.
?>
例如。
答案 1 :(得分:0)
您的代码中存在两个基本缺陷。
首先,您尝试在字符串中使用echo,但这不起作用。要么打印文本,要么使用echo
,要么使用.
连接字符串
其次,您正在混合MySQL UPDATE
和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)
您可以使用数组和内爆很容易地在parantheses中生成部件:
$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实际上是否生成了可用的变量名称,它只是从代码中复制和粘贴)