其实鸟哥(Laruence)在他的博客中(http://www.laruence.com/2011/12/19/2409.html)很早就说明了,这里应用鸟哥的博文在说一下。
错误得地方对应的php代码为:
&lt;br /&gt;<br /><br /> $sql = &amp;quot;select repayment_time,repayment_account from `{borrow_repayment}` where status !=1 and borrow_id in (select id from `{borrow}` where user_id = {$user_id} and status=3) order by repayment_time &amp;quot;;&lt;br /&gt;<br /><br /> $result = $mysql-&amp;gt;db_fetch_array($sql);&lt;br /&gt;<br /><br /> $_result['new_repay_time'] = $result['repayment_time'];&lt;br /&gt;<br /><br /> $_result['new_repay_account'] = $result['repayment_account'];<br /><br /> &lt;/p&gt;<br /> </p> </p> <p> <p><br /> &lt;p&gt;<br /><br />
但是根据sql查询的结果为空,此时 $result[‘repayment_time’] 和 $result[‘repayment_account’] 都是不存在的;所以应该写成如下:
<br /><br /> &lt;/p&gt;<br /> </p> </p> <p> <p><br /> &lt;p&gt;<br /><br /> $sql = &amp;quot;select repayment_time,repayment_account from `{borrow_repayment}` where status !=1 and borrow_id in (select id from `{borrow}` where user_id = {$user_id} and status=3) order by repayment_time &amp;quot;;&lt;br /&gt;<br /><br /> $result = $mysql-&amp;gt;db_fetch_array($sql);&lt;br /&gt;<br /><br /> $_result['new_repay_time'] = isset($result['repayment_time'])?$result['repayment_time']:&amp;quot;&amp;quot;;&lt;br /&gt;<br /><br /> $_result['new_repay_account'] = isset($result['repayment_account'])?$result['repayment_account']:&amp;quot;&amp;quot;;<br /><br /> &lt;/p&gt;<br /> </p> </p> <p> <p><br /> &lt;p&gt;<br /><br /> &lt;span style=&quot;line-height: 1.6em;&quot;&gt;
这也是php4和php2不同的地方。鸟哥的说法更严谨:
具体的改变是, 对于一个变量$a, 如果$a是一个字符串, 那么, 对于非数字型索引, 比如$a[“foo”], 在isset的时候将返回false, empty返回true, 但是为了兼容已有的代码, 当你获取这个值的时候, 还是会返回$a[0], 不过会额外抛出一个警告信息. 比如:
&lt;/span&gt;<br /><br /> &lt;/p&gt;</span><br /> </p></span> </p> <p> <p><br /> &lt;p&gt;<br /><br /> &amp;lt;?php&lt;br /&gt;<br /><br /> $a = &amp;quot;laruence&amp;quot;;&lt;br /&gt;<br /><br /> var_dump($a["foo"]) ; //PHP Warning: &amp;nbsp;Illegal string offset &amp;#39;foo&amp;#39;&lt;br /&gt;<br /><br /> //output string(1) &amp;quot;l&amp;quot;&lt;br /&gt;<br /><br /> &amp;nbsp;&lt;br /&gt;<br /><br /> var_dump(isset($a["foo"]));&lt;br /&gt;<br /><br /> //false&lt;br /&gt;<br /><br /> &amp;nbsp;&lt;br /&gt;<br /><br /> var_dump(<br /><br /> &lt;/p&gt;<br /> </p> </p> <p> <p><br /> &lt;p&gt;<br /><br /> &lt;span class=&quot;sh_symbol&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;
而对于键值是bool, double, null的情况, 将会和以前保持一致, 不过会抛出一个Notice信息.
-
&lt;/span&gt;<br /><br /> &lt;/li&gt;<br /><br /> &lt;li style=&quot;margin: 0px; padding: 0px; border: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;<br /><br /> &amp;lt;?php&lt;br /&gt;<br /><br /> $a = &amp;quot;bar&amp;quot;;&lt;br /&gt;<br /><br /> echo $a[TRUE]; &amp;nbsp;//PHP Notice: &amp;nbsp;String offset cast occured&lt;br /&gt;<br /><br /> //output a<br /><br /> &lt;/li&gt;<br /><br /> &lt;li style=&quot;margin: 0px; padding: 0px; border: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;<br /><br /> &lt;span class=&quot;sh_symbol&quot; style=&quot;margin: 0px; padding: 0px; border: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; vertical-align: baseline;&quot;&gt;
而对于数字型的字符串索引, 比如”1″, “12″等, 和以前保持一致.
如需转载请注明: 转载自26点的博客
转载请注明:26点的博客 » php5.4出现PHP Warning: Illegal string offset的解决办法
写的不错了,多谢分享啦。欢迎回访