解析错误:语法错误,意外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'])");
请使用准备好的声明
你必须用花括号包围你的变量:
$result = mysql_query("INSERT INTO movies (id, title, year) VALUES({$arr['title_id']}, {$arr['title']}, {$arr['year']})");
看看我的complex (curly) braces解释:问题转义php变量
对我有用的代码如下:
$result = mysql_query("
INSERT INTO movies (id, title, year)
VALUES(" . implode($arr,', ').";
使用implode,您可以使用','作为分隔字符获取阵列上的所有项目。
这是一个字符串解析问题。请参阅有关变量解析的PHP文档。
问题是当使用简单语法(没有花括号)时,索引是在没有引号的情况下编写的。
您可以在变量周围使用花括号:
$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])");
正如其他人所提到的,你应该使用花括号或使用.运算符的字符串连接来将变量嵌入到字符串中。
另外,假设title列是VARCHAR字段而另外两个是INT字段,则必须在title值周围加上引号:
$result = mysql_query("INSERT INTO movies (id, title, year) VALUES(" . $arr['title_id'] .", '" . $arr['title'] ."'," . $arr['year'] .")");
如果id和year字段也是VARCHAR字段,则必须对id和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'] .")");
您应该阅读有关字符串的PHP文档,以找出代码错误的原因。
不是直接的答案,但我强烈建议尽可能转移到PHP Data Objects。支持许多更高级别的mysql函数,如预处理语句(不再担心sql注入),将数据直接拖入对象等。