PHP数组INSERT进入MySQL失败

时间:2013-02-01 17:44:26

标签: php mysql

很多帖子与我的相似,但都不起作用。

拥有数组$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行给出布尔值

6 个答案:

答案 0 :(得分:3)

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

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

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

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

答案 1 :(得分: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));

答案 2 :(得分: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]."' ")
 }

答案 3 :(得分:-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等列的保留名称。

答案 4 :(得分:-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。

答案 5 :(得分:-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]."')"
}