Re: [請益] PHP Array
※ 引述《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://www.ptt.cc/bbs/PHP/M.1401730903.A.858.html
※ 編輯: GALINE (114.27.61.221), 06/03/2014 02:04:54
→
06/03 02:39, , 1F
06/03 02:39, 1F
→
06/03 09:48, , 2F
06/03 09:48, 2F
→
06/03 09:49, , 3F
06/03 09:49, 3F
→
06/03 09:50, , 4F
06/03 09:50, 4F
→
06/03 13:59, , 5F
06/03 13:59, 5F
→
06/03 13:59, , 6F
06/03 13:59, 6F
→
06/03 21:07, , 7F
06/03 21:07, 7F
→
06/03 21:07, , 8F
06/03 21:07, 8F
→
06/03 21:08, , 9F
06/03 21:08, 9F
推
06/05 10:54, , 10F
06/05 10:54, 10F
→
06/05 11:13, , 11F
06/05 11:13, 11F
→
06/05 11:13, , 12F
06/05 11:13, 12F
→
06/05 11:14, , 13F
06/05 11:14, 13F
討論串 (同標題文章)
PHP 近期熱門文章
PTT數位生活區 即時熱門文章