在 PHP 中,使用一个不用引号括起来的字符串作为一个关联数组的键名是不合法的。
error_reporting(E_ALL);
$foo = array('bar' => 'bar');
$bar = $foo[bar];
看看报错信息, 就会知道解释引擎试图查找一个名为 bar 的常量, 在查找不到的情况下才假设它是字符串 bar, 如此一来, 性能被白白损耗掉了. 因此明确标明关联数组的键名为字符串是绝对必要的.
error_reporting(E_ALL);
$foo = array('bar' => 'bar');
$bar = $foo[bar];
看看报错信息, 就会知道解释引擎试图查找一个名为 bar 的常量, 在查找不到的情况下才假设它是字符串 bar, 如此一来, 性能被白白损耗掉了. 因此明确标明关联数组的键名为字符串是绝对必要的.
$myquery="insert into news(title) values ('$_POST['title']')";
从理论上来讲之所以能够正常的执行是因为单引号被双引号给屏蔽成了普通字符,所以POST的变量才能够获取,这句SQL在PHP中执行时实际上根本就没有单引号的存在,所以$_POST['title']是在按$_POST[title]进行执行!!现在有很多程序员都采用这种方式来操作数据库,那他们岂不是都面临大麻烦了!!!
至于:$myquery="insert into news(title) values ('$_POST['title']')";
字符里里不能直接引用数组元素值,需要用连接符或{}
在 error_reporting = E_ALL & ~E_NOTICE 时确实不会报错
但 error_reporting = E_ALL 就不行的了php在访问没有用单引号括起的键名时,首先检查该键名是否为常量,然后在当作串处理
如果error_reporting = E_ALL,那么就会因为找不到常量而报错虽然先查找常量也花不了多少时间,但不去找不就更快吗?
“那你再看看这句SQL:
$myquery="insert into news(title) values ('$_POST['title']')";
从理论上来讲之所以能够正常的执行是因为单引号被双引号给屏蔽成了普通字符,所以POST的变量才能够获取,这句SQL在PHP中执行时实际上根本就没有单引号的存在,所以$_POST['title']是在按$_POST[title]进行执行!!现在有很多程序员都采用这种方式来操作数据库,那他们岂不是都面临大麻烦了!!!”
首先你的语句就是错误的,这条语句连语法检查都不能通过,更不要说执行了
位于双引号中的键名是不能用单引号括起的,除非你用{}将数组元素整个括起有关这些描述在手册中都有,请认真阅读
不要图一时省事,而造成事故隐患。修改起来可是很费劲的!
改为
$myquery="insert into news(title) values ('{$_POST['title']}')";应该就没有报错了吧,.