0

和我类似的帖子很多,都不行。

有一个数组$data['date'], $data['name'], $data['value']

试图插入 MySQL 表 MyValues(日期、名称、值)

尝试了 7-8 种不同的方法,都没有奏效。想要类似的东西

for ($a=0;$a<10;$a++) {
    mysql_query("INSERT INTO MyValues('Date','Index_Name','Index')
       VALUES ($data['date'][$a] ,$data['name'][$a], $data['value'][$a])"
}

还尝试过 foreach,构建单个字符串以提供给 MySQL 等。

得到这个错误警告:mysql_error() 期望参数 1 是资源,第 45 行给出的布尔值

4

6 回答 6

3

columnName 不应该用单引号引起来,因为它们是标识符而不是字符串文字。

INSERT INTO `Values` (Date,Index_Name,Index) VALUES (....)

还有一件事,这里唯一需要用反引号括起来的标识符是 tableName VALUES,因为它是一个保留关键字。

作为旁注,SQL Injection如果变量的值(s)来自外部,则查询很容易受到攻击。请看下面的文章,了解如何预防。通过使用PreparedStatements,您可以摆脱在值周围使用单引号。

于 2013-02-01T17:48:49.167 回答
0

由于Values是保留字,因此不能将其原样用作表名。您必须使用反引号将其括起来。同样,使用单引号来命名列也是无效的,你也需要反引号。

试试这个:

$out = Array();
$esc = "mysql_real_escape_string";
foreach($data['date'] as $k=>$v) {
    $out[] = "('".$esc($data['date'][$k])."', '".$esc($data['name'][$k])."', "
       ."'".$esc($data['value'][$k])."')";
}
mysql_query("INSERT INTO `Values` (`Date`, `Index_Name`, `Index`) values ".implode(",",$out));
于 2013-02-01T17:51:02.327 回答
0

试试这个,$a++不要用$ee++

    for ($a=0;$a<10;$a++) {
mysql_query("INSERT INTO `Values` (`Date`,`Index_Name`,`Index`)
   VALUES ('".$data['date'][$a]."' ,'".$data['name'][$a]."', '".$data['value'][$a]."' ")
 }
于 2013-02-01T18:14:49.733 回答
-1

首先,只需将 PDO/mysqli 与准备好的语句一起使用,这样您就不会遇到任何这样的问题。

不过,这将解决它(带有反引号而不是单引号的列名,以及转义的数据):

for ($a=0;$a<10;$a++) {
    mysql_query("INSERT INTO `Values` (`Date`,`Index_Name`,`Index`)
       VALUES ('".mysql_real_escape_string($data['date'][$a])."' ,
'".mysql_real_escape_string($data['name'][$a])."', 
'".mysql_real_escape_string($data['value'])[$a]."'");
}

并尽量避免为您的列保留名称,例如indexvalues

于 2013-02-01T17:48:10.723 回答
-1

首先,我相信您希望引用您的查询值,因此结果是“价值”而不仅仅是价值。例子:

mysql_query("INSERT INTO Values(Date,Index_Name,Index) VALUES ('$data['date'][$a]' ,'$data['name'][$a]', '$data['value'][$a]');

如果您正在执行多个查询,请执行以下操作:

$q = "INSERT INTO Values(Date,Index_Name,Index) VALUES ";
for {
  // Add to the string here for each insert item
}
mysql_query($q);

此外,请开始逐步淘汰 PHP 的 mysql_* 库以支持 mysqli 或 PDO。

于 2013-02-01T17:48:56.723 回答
-2

这有效:

for ($a=0;$a<10;$a++) {
    mysql_query("INSERT INTO Values('Date','Index_Name','Index')
    VALUES ('".$data['date'][$a]."','".$data['name'][$a]."','".$data['value'][$a]."')"
}
于 2013-02-01T17:49:35.370 回答