作者leo600498 (DKNY)
看板PHP
標題Re: [請益]SQL和PHP
時間Sat Oct 6 02:15:48 2007
既然問題解決了
就來做一下知識分享
※ 引述《leo600498 (DKNY)》之銘言:
: 我的問題是
: 1. SQL語法在PHP環境中寫不進去資料庫中
: 2. 最後的那個if判別式也一直出現錯誤@@
: 註一:$_POST['select']是前一頁表單選擇要更新的欄位名稱
: 註二:$_POST['name1']是前一頁要更新的值
: 試了好多次都有錯誤@@
: 勞煩大家指點一下小弟 >"<
: --------------
: $updateSQL = sprintf("UPDATE user SET '".$_POST['select']."'= '".$_POST['n
: ame1']."' WHERE id='".$_SESSION['id']."'");
這邊的SQL run出來會是:
UPDATE user SET '$_POST['select']' = '$_POST['name1']
WHERE id ='$_SESSION['id']'
之所以會run不出來的原因
是'$_POST['select']'的位置本來要填的是欄位名稱
欄位名稱不用加上
' '
所以正確的語法應該是:
$updateSQL = sprintf("UPDATE user SET
".$_POST['select']." = '".$_POST['n
ame1']."' WHERE id='".$_SESSION['id']."'");
: mysql_select_db($database_connection, $connection);
: $Result1 = mysql_query($updateSQL, $connection) or die(mysql_error());
: if($Result1)
: {echo '修改成功';
這邊因為衝碼的關係('會被當成字元)所以在尾巴加上!
變成{echo '修改成功
!';
: }
: else
: {echo '修改失敗' ;
同上
: }
: 拜託大家了
: 拜託拜託拜託
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.115.204.211
推 buganini:欄位名稱最好用`包起來, 不然萬一欄位名稱是保留字的時候 10/06 02:27
→ buganini:會炸 而且看不出原因.. (譬如用text當field name) 10/06 02:27
→ buganini:還是要提醒你注意一下SQL Injection 10/06 02:28
→ yanli2:其實php,ini開啟魔術引號就不用怕衝碼的問題了... 10/06 02:30
推 buganini:php6會廢掉magic_quote,所以還是自己來吧 10/06 02:55
→ buganini:而且magic_quote也無法解決code用big5造成的問題吧.. 10/06 02:56
→ buganini:事實上我個人也不贊成用addslashes處理sql string 10/06 02:57
→ buganini:你無法確定mysql那邊到底能不能正確處理big5 10/06 02:58
→ buganini:用mysql_real_escape_string()吧.. 10/06 02:58
→ buganini:用UTF-8吧.... 10/06 02:59
推 leo600498:恩我也不喜歡用addslashes 謝謝大家給的建議~我會去嘗試 10/06 03:24
推 yanli2:可以... 我主機已經完全解決big5中文帶來的衝碼問題了... 10/06 04:06
推 rackyrose:推 buganini 所說的,請別用這種方式,sql injection 10/06 17:13