php变量直接在sql语句中使用时的疑惑

本意是用sql语句查询,过程中用到了一个php脚本中的数组

奇怪的是,在php脚本中使用该数组值的时候用的是$user[‘name’],中括号内带单引号。而sql语句中直接使用该变量(不使用.进行拼接)时,却是$user[name] 不带单引号。

如图:

php变量直接在sql语句中使用时的疑惑0

当在sql语句中使用$user[‘name’]时,会产生以下报错:

错误信息:

syntax error, unexpected ” (t_encapsed_and_whitespace), expecting identifier (t_string) or variable (t_variable) or number (t_num_string) in d:\procedure\php\www\blog\login.php on line 23

经查询,得以下三种写法

php变量直接在sql语句中使用时的疑惑1

其中第二种为常规写法,即使用拼接法,拼接php上的变量

第三种能够达到预期效果

但是浏览器会报一个notice错误

php变量直接在sql语句中使用时的疑惑2

虽然得到了解决问题的方法,但是对于php这种用法很不理解,google/baidu没有找到答案(也可能是我的搜索方式不对)。

让朋友帮忙在他的电脑上试过,结果与我的一样,基本可以排除是环境orphp版本的问题。

希望能有高手指点一二,小弟将不胜感激!

回复讨论(解决方案)

你应该先搞清楚 constant(常量)是什么意思

php 对于未被引号括起的字符串,先检查是否是常量,然后才解释为字串

当一个一维数组元素出现在双引号当中时:

“$ar[key]” 正确

“$ar[‘key’]” 语法错

“{$ar[key]}” 使用了未定义常量

“{$ar[‘key’]}” 正确

这是 php 文法分析程序内置的评判标准,没有为什么!

Posted in 未分类