如何在MYSQL插入查询中编写

时间:2013-09-23 12:49:05

标签: php mysql

我是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]) ."'
}
");

请提出任何建议!

2 个答案:

答案 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 UPDATEINSERT语法。

您正在尝试这样做:

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实际上是否生成了可用的变量名称,它只是从代码中复制和粘贴)