Re: [請益] SQL想請問多重條件查詢的寫法

看板PHP作者 (Tails)時間12年前 (2013/06/25 02:28), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
※ 引述《qm29213039 (崩啾)》之銘言: : 我現在想做一個查詢系統 : 可以輸入ID,名字...等屬性去做查詢,可以只輸入一個或者多個查詢條件去做查詢 : GOOGLE看到有教學文是判斷有沒有GET到值 : 如果有GET到值,則SELECT GET到的值。 : 如果沒有,就讓它等於欄位的名稱 : (例如: id = id,這樣輸出恆等於一,SELECT AND 1就等於沒有這個選項) 原來還有這招,今天學到了Orz... : 我的程式是這樣寫.. : if ($_GET['Name'] == ""){ : $Name = Name; : } : ELSE{ : $Name = $_GET[$Name] : } $_GET['Name'] ? 老話一句:注意SQL injection : SELECT * FROM main_info WHERE Name = '$Name' AND ID = '$ID'; : 也就是說,當我ID跟NAME都有輸入的時候...,SELECT語句會變成 : SELECT * FROM main_info WHERE Name = '$_GET[Name]' AND ID = '$_GET[ID]'; : 其中一個沒有輸入的時候,則會變成 : SELECT * FROM main_info WHERE Name = 'Name' AND ID = '$_GET[ID]'; : 然後這邊就出現問題了 : 因為WHERE Name = 'Name'變成會去查Name的欄位有沒有符合Name的結果 : 請問我該怎麼修正這個錯誤,或者是有比較好的方法可以解決這個問題呢? Name = 'Name'Name = Name 是兩件不同的事情 理由嘛... 不知道有沒有發現到 MySQL的表格名稱和欄位名稱可以用倒引號(``)括起來,代表的是一個變數 而單引號或雙引號括起來的代表的是常數字串 所以上面兩個運算式就會等價於下面這兩個 1. `Name` = 'Name' (這樣的寫法就有點像PHP的 if ($Name == 'Name') ) 2. `Name` = `Name` (當然每筆資料都會是True,如同 if ($Name == $Name) ) 呃...再來應該可以BJ4了吧XD -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.126.68.4
文章代碼(AID): #1Ho8_cMS (PHP)
文章代碼(AID): #1Ho8_cMS (PHP)