0

我是 mySQL 和 PHP 的新手。我有一个表,我想用数组中的值进行更新。我想我正在犯语法错误。假设我的表字段是Reg_noField1Field2 ......我正在使用:

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

请有任何建议!

4

2 回答 2

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 注入,上述示例也不安全。

所以,我的建议是,还要了解准备好的陈述

编辑:

如果要在循环中运行 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.
 ?>

例如。

于 2013-09-23T12:55:32.833 回答
0

您的代码中有两个基本缺陷。

首先,您尝试在字符串中使用 echo ,但这不起作用。要么打印出文本,然后使用echo,要么使用连接字符串.

其次,您正在混合 MySQLUPDATEINSERT语法。

您正在尝试这样做:

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

于 2013-09-23T13:31:19.467 回答