看板 PHP 關於我們 聯絡資訊
既然問題解決了 就來做一下知識分享 ※ 引述《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