解析错误:语法错误,意外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'])");
答案 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'] . ")");
如果id
和year
字段也是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注入),将数据直接拖入对象等等。