使用数组中的PHP变量插入SQL数据库。 (语法错误)

时间:2011-09-08 21:11:23

标签: php sql

解析错误:语法错误,意外T_ENCAPSED_AND_WHITESPACE,期待T_STRING或T_VARIABLE或T_NUM_STRING

这是抛出错误的一行。

$result = mysql_query("INSERT INTO movies (id, title, year) VALUES($arr['title_id'], $arr['title'], $arr['year'])");    

7 个答案:

答案 0 :(得分:3)

你必须用大括号包围你的变量:

$result = mysql_query("INSERT INTO movies (id, title, year) VALUES({$arr['title_id']}, {$arr['title']}, {$arr['year']})");

请在此处查看我的complex (curly) braces说明:Problem escaping php variable

答案 1 :(得分:2)

对我有用的代码如下:

$result = mysql_query("
INSERT INTO movies (id, title, year) 
VALUES(" . implode($arr,', ').";

使用implode,您可以使用' ,'来获取阵列上的所有项目。作为分离角色。

答案 2 :(得分:1)

您应该阅读PHP documentation about strings以了解您的代码错误的原因。

答案 3 :(得分:1)

$result = mysql_query("INSERT INTO movies (id, title, year) VALUES($arr['title_id'], $arr['title'], $arr['year'])"); 

我会这样做:

$result = mysql_query("INSERT INTO movies (id, title, year) VALUES(" . $arr['title_id']. ", " . $arr['title'] . ", " . $arr['year'] . ")"); 

答案 4 :(得分:1)

正如其他人所提到的,你应该使用花括号或使用.运算符的字符串连接来将变量嵌入到字符串中。

此外,假设title列是VARCHAR字段而其他两个是INT字段,则必须在title值附近加上引号:

$result = mysql_query("INSERT INTO movies (id, title, year) VALUES(" . $arr['title_id'] . ", '" . $arr['title'] . "', " . $arr['year'] . ")");

如果idyear字段也是VARCHAR字段,则必须执行相同操作。

答案 5 :(得分:1)

这是一个字符串解析问题。请参阅PHP documentation on variable parsing。 问题是当使用简单语法(没有花括号)时,索引是在没有引号的情况下编写的。

您可以在变量周围使用花括号:

$result = mysql_query("INSERT INTO movies (id, title, year) VALUES({$arr['title_id']}, {$arr['title']}, {$arr['year']})");

或者你可以将字符串和变量与点连在一起,完全避免字符串解析:

$result = mysql_query('INSERT INTO movies (id, title, year) VALUES('.$arr['title_id'].', '.$arr['title'].', '.$arr['year'].')');

或者省略引号,但这看起来不太干净:

$result = mysql_query("INSERT INTO movies (id, title, year) VALUES($arr[title_id], $arr[title], $arr[year])");

答案 6 :(得分:0)

不是直接的答案,但我强烈建议尽可能转移到PHP Data Objects。支持许多更高级别的mysql函数,比如预处理语句(不再担心sql注入),将数据直接拖入对象等等。