Re: [請益]SQL和PHP

看板PHP作者 (DKNY)時間18年前 (2007/10/06 02:15), 編輯推噓5(508)
留言13則, 4人參與, 最新討論串2/2 (看更多)
既然問題解決了 就來做一下知識分享 ※ 引述《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

10/06 02:27, , 1F
欄位名稱最好用`包起來, 不然萬一欄位名稱是保留字的時候
10/06 02:27, 1F

10/06 02:27, , 2F
會炸 而且看不出原因.. (譬如用text當field name)
10/06 02:27, 2F

10/06 02:28, , 3F
還是要提醒你注意一下SQL Injection
10/06 02:28, 3F

10/06 02:30, , 4F
其實php,ini開啟魔術引號就不用怕衝碼的問題了...
10/06 02:30, 4F

10/06 02:55, , 5F
php6會廢掉magic_quote,所以還是自己來吧
10/06 02:55, 5F

10/06 02:56, , 6F
而且magic_quote也無法解決code用big5造成的問題吧..
10/06 02:56, 6F

10/06 02:57, , 7F
事實上我個人也不贊成用addslashes處理sql string
10/06 02:57, 7F

10/06 02:58, , 8F
你無法確定mysql那邊到底能不能正確處理big5
10/06 02:58, 8F

10/06 02:58, , 9F
用mysql_real_escape_string()吧..
10/06 02:58, 9F

10/06 02:59, , 10F
用UTF-8吧....
10/06 02:59, 10F

10/06 03:24, , 11F
恩我也不喜歡用addslashes 謝謝大家給的建議~我會去嘗試
10/06 03:24, 11F

10/06 04:06, , 12F
可以... 我主機已經完全解決big5中文帶來的衝碼問題了...
10/06 04:06, 12F

10/06 17:13, , 13F
推 buganini 所說的,請別用這種方式,sql injection
10/06 17:13, 13F
文章代碼(AID): #171dzLKq (PHP)
討論串 (同標題文章)
文章代碼(AID): #171dzLKq (PHP)