最近幾天在寫一個小程式的時候遇到一個問題,就是我想要直接在我的SQL查詢語句裡面夾帶$_POST變數,不想要用串接運算子來做串接,可是因為引號的問題所以讓我搞了很久才會用,這裡簡單的介紹一下,並且我要感謝Bu跟蒼時弦教會我這個方法!如果不是他們我可能還不知道這個方式,另外這個方式不只可以用在$_POST,也可以用在其他陣列
P.S.使用本文的夾帶方式有SQL注入的危險,建議先將變數處理過在放到SQL Query中
大家都知道在PHP裡面,雙引號裡面可以放變數,例如:
$x=4;
echo "print $x";以上程式碼會輸出:「print 4」
但如果是:
$x=4;
echo 'print $x';則會輸出:「print $x」
而我現在的意思就是說我把SQL查詢命令用雙引號包住,然後再裡面放變數,放一般變數是可以的,但如果放$_POST的話就會出一點小問題…..
SQL查詢命令夾帶一般變數:
mysql_query("select * from `sql_tab` where `name`='$name'");上面這樣是可以正常運作的
但如果改成:
mysql_query("select * from `sql_tab` where `name`='$_POST["name"]' ");
mysql_query("select * from `sql_tab` where `name`='$_POST['name']' ");以上兩種寫法都是會出錯的,因為引號的問題
所以, 該怎麼寫呢? 原來,在PHP裡面,你的$_POST其實不一定要用引號框住
也就是說我們可以寫成:
mysql_query("select * from `sql_tab` where `name`='$_POST[name]'");這樣的寫法,name不需要用單引、雙引框住
但是這樣的寫法對效能有些傷害,因為PHP會先去搜尋程式裡面是否有$name這個變數,如果沒有,才會把$_POST[name]當成$_POST[“name”]來處理,所以效能變差了
既然如此,還有什麼更好的寫法嘛?這時候就要感謝Bu大大在我頭上開了一盞明燈! 可以改寫成:
mysql_query("select * from `sql_tab` where `name`='{$_POST["name"]}'");以上的寫法,把$_POST用大括弧包住,然後name的部份一樣用雙引號處理,透過這種寫法,就可以在SQL查詢語句裡面夾帶$_POST或是陣列囉~