2010-08-30 177 views
0

我剛剛實現了mysql_real_escape_string(),現在我的腳本不會寫入數據庫。在添加mysql_real_escape_string()之前一切正常:PHP表單不會發布

任何想法??

$name = mysql_real_escape_string($_POST['name']); 
$description = mysql_real_escape_string($_POST['description']); 
$custid = mysql_real_escape_string($_SESSION['customerid']); 

mysql_send("INSERT INTO list 
       SET id = '', 
        name = '$name', 
        description = '$description', 
        custid = '$custid' "); 
+2

什麼是mysql_send? 是否有任何錯誤報告?查詢在發送到mysql之前是什麼樣的(嘗試將它回顯出來)? – blockhead 2010-08-30 16:25:40

+0

調試提示:將SQL語句放在一個變量中,即'$ sql =「INSERT INTO list SET id ='',name ='$ name'」'etc ... then'echo $ sql'(或'die ($ SQL)')。這可能會對導致問題的原因有所瞭解。另外,你怎麼連接到數據庫,你自己或通過某種第三方API?如果是後者,也許有api建議轉義數據的方法。 – webbiedave 2010-08-30 16:26:57

回答

2

那是什麼mysql_ 發送函數?
如果將其更改爲mysql_query(),該怎麼辦?

+0

OP表示它一直在運行,直到他開始使用mysql_real_escape_string爲止。他沒有說他改變了這一行代碼。 – blockhead 2010-08-30 16:47:33

0

mysql_real_escape_string應該作爲第二個參數傳遞一個數據庫連接,因爲它要求的字符需要進行轉義什麼數據庫。

$connection = mysql_connect(HOST, USERNAME, PASSWORD); 
$cleanstring = mysql_real_escape_string("my string", $connection); 
+0

不是如果你已經有一個連接打開 – blockhead 2010-08-30 16:24:47

+0

@blockhead,我正要說。您可能會與mysqli_real_escape_string混淆,它需要第一個參數作爲數據庫的鏈接。 – Lekensteyn 2010-08-30 16:26:00

+0

在某些情況下,它會感到困惑(就像如果您打開多個連接一樣),我已經多次遇到此問題。我總是通過連接來確保字符串不被截斷/擦除。 – KeatsKelleher 2010-08-30 16:26:57

0

上了解如何使用某些功能失敗的典型...... 你僅僅使用於原始輸入數據mysql_real_escape_string。你有沒有聽說過衛生/驗證輸入? mysql_real_escape_string對數字沒有意義。如果你已經驗證了一個變量是一個數字,你不需要逃避它。

mysql_send是mysql_query的別名吧? 使用調試代碼,在mysql_send(...)之後加echo mysql_error();

1

應該很容易弄清楚發生了什麼。第一步,不要將正在構建的查詢發送到數據庫,而是將它回顯(或記錄它),並查看實際發送到數據庫的內容。

如果這並不明顯,請參閱mysql_error()的說明。

0
 mysql_connect("localhost", "username", "password") or die(mysql_error()); 
     mysql_select_db("database") or die(mysql_error()); 
     $name = mysql_real_escape_string($_POST['name']); 
     $description = mysql_real_escape_string($_POST['description']); 
     $custid = mysql_real_escape_string($_SESSION['customerid']); 

     //If you doing Update use this code 
     mysql_query("UPDATE list SET id = '', name = '$name', description = '$description' WHERE custid = '$custid' ") or die(mysql_error()); 
     //OR if you doing Insert use this code. 
     mysql_query("INSERT INTO list(name, description, custid) VALUES('$name', '$description', '$custid')") or die(mysql_error()); 
     //If custid is Integer type user $custid instead of '$custid'.     

如果要更新的基礎上,客戶ID列表表中的記錄使用UPDATE命令,或者如果你是insertinf記錄成清單表使用INSERT命令。