今天在家複習php時,在做登入的功能 : (*acc是account的縮写)
明明是挺簡單的SQL語法結果一直出錯 ,太傻眼了@@,我都想搥牆了...
第一次下的SQL語法 :
(把整句$sql語法echo出來)
得到的結果卻是 :
第二次下的SQL語法 :
得到的結果卻是 :
上網找了一下好像也沒什麼特別的解答,但簡單來說撈不到資料應該都是sql語法下錯
果然將整句SQL語法都echo出來就抓到問題了....
看一看才發現原來是admin_win少了 一對單引號把它刮起來
最後一次下的SQL語法 :
成功撈到資料:
SELECT * FROM `manager` where `acc`='win' and `pwd`='admin_win';Resource id #6Array ( [id] => 2 [acc] => win [pwd] => admin_win [user_name] => WinWu [last_signin_time] => 0000-00-00 [create_date] => 2012-12-14 )
不曉得發生甚麼事情,就是一直跌跌撞撞,我記得第一種寫法我以前寫過是成功的.....
不管了,總之,完成了!~
明明是挺簡單的SQL語法結果一直出錯 ,太傻眼了@@,我都想搥牆了...
第一次下的SQL語法 :
$sql =sprintf("SELECT * FROM manager WHERE acc=$acc AND pwd=$pwd");
(把整句$sql語法echo出來)
得到的結果卻是 :
SELECT * FROM manager WHERE acc=win AND pwd=You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
結論 : 語法有問題。第二次下的SQL語法 :
$sql =
sprintf("SELECT * FROM `manager` WHERE `acc`='".$acc."' AND `pwd`=admin_win LIMIT 1;");
(把整句$sql語法echo出來)sprintf("SELECT * FROM `manager` WHERE `acc`='".$acc."' AND `pwd`=admin_win LIMIT 1;");
得到的結果卻是 :
SELECT * FROM `manager` WHERE `acc`='win' AND `pwd`=admin_win LIMIT 1;Unknown column 'admin_win' in 'where clause'
甚麼是 Unknown column 'admin_win' in 'where clause' ???上網找了一下好像也沒什麼特別的解答,但簡單來說撈不到資料應該都是sql語法下錯
果然將整句SQL語法都echo出來就抓到問題了....
看一看才發現原來是admin_win少了 一對單引號把它刮起來
最後一次下的SQL語法 :
$sql =sprintf("SELECT * FROM `manager` where `acc`='".$acc."' and `pwd`='admin_win';");
成功撈到資料:
SELECT * FROM `manager` where `acc`='win' and `pwd`='admin_win';Resource id #6Array ( [id] => 2 [acc] => win [pwd] => admin_win [user_name] => WinWu [last_signin_time] => 0000-00-00 [create_date] => 2012-12-14 )
不曉得發生甚麼事情,就是一直跌跌撞撞,我記得第一種寫法我以前寫過是成功的.....
不管了,總之,完成了!~
要注意 SQL Injection 的問題噢
回覆刪除ok ^^
刪除其實可以改用mysqli,就可以避免sql injection的問題了
回覆刪除謝謝,對不起現在才回你><
刪除另外推薦 php pdo 的連線方式, 方便好用:)
回覆刪除但僅支援 php5 以上版本,據說也是 php6 的默認連線方式,
防護大部分的 sql injection 問題,通常會另外自訂一個 pdo class 包裝成類似以下寫法
pdo->insert(xx,xx) , pdo->update(xx,xx) , ...etc
pdo 恩,我來研究看看!
刪除第一次聽到
謝謝你的分享:)