繁体   English   中英

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

[英]Using PHP variables from an array to insert into SQL database. (Syntax error)

解析错误:语法错误,意外的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'] . ")"); 

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

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

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

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

这是一个字符串解析问题。 请参阅有关变量解析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])");

这不是一个直接的答案,但是我强烈建议您尽可能迁移到PHP数据对象 支持许多更高级别的mysql函数,例如准备好的语句(不再担心sql注入),将数据直接拉入对象等。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM