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

本文详细介绍了PHP中遇到的SQL插入语句错误,解析错误涉及语法、变量引用和字符串拼接。提出了使用花括号包围变量和预处理语句的方法来避免SQL注入,强调了正确引用变量和理解PHP字符串解析的重要性。同时,推荐转向使用PHPDataObjects以利用其高级功能,如预处理语句和直接数据对象操作。
摘要由CSDN通过智能技术生成

解析错误:语法错误,意外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注入),将数据直接拖入对象等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值