PHP 板


LINE

看板 PHP  RSS
※ 引述《orz811017 (orz811017)》之铭言: : http://ppt.cc/OtRM : 这图中为什麽 前者的 valeue->row[0] 会错误 : Catchable fatal error: Object of class stdClass could not be converted to : string 以这个例子来说,PHP 认定成 "$value->$row[0]" 一个 两个 而不是 "$value->$row[0]" 一个变数 但是 $value 是没办法转换成字串的物件,所以 PHP 就生气了。  这个切字串的判断也是很合理的 如果今天写 code 的人真的要输出「XXX->OOO」这个字串,应该也会写成这样... 这部份的处理方法就如同上面推文,改成 "{$value->$row[0]}" 就可以解决了 这样 PHP 才知道正确的断点在哪里 然後针对这段 code 提出一点其他的建议 1. 资料栏位名称尽量不要用中文,偶而会发生灵异现象,像是 http://twpug.net/x/modules/newbb/viewtopic.php?topic_id=2328 http://www.dotblogs.com.tw/bruce655/archive/2012/05/30/72480.aspx 虽然没碰到问题的话就没问题... 2. 任何变数喂进 SQL 之前都要作过 Escape,例如 "SELECT * FROM `company` WHERE name = '{$name}'"   如果今天要查白兰氏而输入了「Brand's」,那就会组合成 "SELECT * FROM `company` WHERE name = 'Brand's'" ^^^ 这个地方会有 SQL 错误 如果你用 mysql_query() 来查资料,那麽正确的作法是用 mysql_real_escape_string() 把输入值洗过一次,例如 "SELECT * FROM `company` WHERE name = '".mysql_real_escape_string($name)."'" 组出来的 SQL 会是 "SELECT * FROM `company` WHERE name = 'Brand\'s'" ^^ 这个单引号被跳脱掉了 可能有人说用 addslashes() 可以作类似的事情,但是不要这麽用[汗] 用 mysql_query() 来下 SQL 的时候,你只应该用 mysql_real_escape_string() 没有其他选择 3. 请爱用 sprintf(),尤其是你想要作 2. 的时候。例如可以把 2. 的 SQL 改写成 $sql = sprintf( "SELECT * FROM `company` WHERE name = '%s'", mysql_real_escape_string($name) ); 或者更长一点的例子 $sql = sprintf( "SELECT * FROM `company` WHERE name='%s' AND type='%s' AND address='%s'", mysql_real_escape_string($name), mysql_real_escape_string($type), mysql_real_escape_string($address) ); 原文的例子就更明显了,我个人觉得这比全部写在一起更容易阅读... -- 「是大环境要求的~毕竟没有总受就没有故事~╮(╯_╰)╭」 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.27.61.221
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/PHP/M.1401730903.A.858.html ※ 编辑: GALINE (114.27.61.221), 06/03/2014 02:04:54
1F:→ danny8376:虽然改用mysqli/pdo 然後用prepare比escape来得好www 06/03 02:39
2F:→ MOONRAKER:中文属性名没有碰过 但是有碰过数字属性名 06/03 09:48
3F:→ MOONRAKER:写成 $object->{1}->子属性 才能读取 XP 06/03 09:49
4F:→ MOONRAKER:来源应该是从XML或JSON转过来的… 06/03 09:50
5F:→ GALINE:以这个例子连栏位名称都是变数(这也是坏味道...) 06/03 13:59
6F:→ GALINE:prepared statement *好像*没办法处理的样子,不太确定 06/03 13:59
7F:→ Darkland:prepared statement 可以阿. 他就是让你把 query 跟 参数 06/03 21:07
8F:→ Darkland:切开,避免参数被当作语法的一部分,所以只要参数最後是 06/03 21:07
9F:→ Darkland:个值,长的再奇怪都可以. 06/03 21:08
10F:推 orz811017:这篇收益良多 谢谢大大!! 06/05 10:54
11F:→ orz811017:栏位名称用变数 是因为想要尝试用LOOP写好完整的指令 06/05 11:13
12F:→ orz811017:(自己有点懒) 而且其他地方也会用到相同的栏位名称 06/05 11:13
13F:→ orz811017:就想说乾脆全部设为变数比较方便 06/05 11:14







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:WOW站内搜寻

TOP