2013-08-30 78 views
0

設置簡單,可能的原因瘋狂的金額(以一個沒有經驗的程序員,例如我自己,至少):MySQL的更新只更新整數,而不是字符串

隨着JS我定義的,後來電話:

function dbUpdate(x, y, z) { 
    $.ajax({ 
     url: 'php/dbUpdate.php', 
     type: 'post', 
     data: {table: x, column: y, value: z}, 
     success: function(html) { 
     } 
    }); 
} 

dbUpdate("userbase", "currentLanguage", "en"); 

用PHP/dbUpdate.php,這個數據被捕獲並加工成更新查詢,這曾無數次:

$userID = 0; 

$table = ($_POST['table']); 
$column = ($_POST['column']); 
$value = ($_POST['value']); 

mysql_query("UPDATE $table SET $column=$value WHERE id=$userID", $con); 
// assume $con is defined 

問題:當DBU pdate的'z'參數是一個整數(例如,var z = 70;)則沒有問題。但是,當它是一個簡單的字符串(例如,var z =「en」;如上)時,它不會更新。

我檢查了數據庫的結構,它被設置爲'varchar',所以它應該接受字符串,但是,嘿,我是誰,我認爲我知道這件事是通過和通過。

我猜這是一個簡單的語法類的初學者還沒有感覺的東西,但我厭倦了無休止地調整語法沒有結果,或結果,以後會拍攝麻煩時以新的方式使用。

所以這裏是希望你可以和我一起工作!

+0

除非你計劃在回調函數中使用'html',因爲你沒有回調使用,你可以刪除它。 –

+0

mysql_query(「UPDATE $ table SET $ column =」$ value「WHERE id = $ userID」,$ con); –

+0

如果你使用它,你會得到一個語法錯誤,因爲你沒有正確地連接你的變量。請看我的回答 –

回答

0

我發現了,感謝弗拉德。

但備查人同樣的目標:

我想dbUpdate.php能夠同時處理字符串和整數,所以我把弗拉德的意見和寫道:

$userID = 0; 

$table = ($_POST['table']); 
$column = ($_POST['column']); 
$value = ($_POST['value']); 

if (is_string($value)) { 
    mysql_query("UPDATE $table SET $column='$value' WHERE id=$userID", $con); 
} 
else { 
    mysql_query("UPDATE $table SET $column=$value WHERE id=$userID", $con); 
} 
0

嘗試逃離變量:

mysql_query("UPDATE $table SET '".$column."'='".$value."' WHERE id='".$userID.'", $con);

請停止使用mysql_*功能以及,你的代碼是很容易被破解(你沒有淨化你的$_POST值)。儘快使用mysqli_*PDO,因爲您使用的是不推薦使用的代碼。

基本上,你允許原始輸入到你的服務器(客戶端檢查可以通過禁用javascript來規避),這是非常糟糕的。

+0

馬上試試,男士,提前致謝。對於清理我的$ _POST值,你的意思是什麼?感謝所有的建議! – Victor

+0

這是一個不推薦的方法:但在這種情況下,使用'mysql_real_escape_string($ _ POST ['whatever']);'(它會是'mysqli_real_escape_string()'以獲得更好的方法,但是您必須重寫完整的代碼做到這一點 –

+0

它沒有工作,男人。 – Victor

0

假設你的id是一個INT,你只需要引用你的價值。

mysql_query("UPDATE $table SET $column='$value' WHERE id=$userID", $con); 
+0

id確實是一個INT,但請記住$ value必須既可以是字符串也可以是整數,這個引用是不會導致整數問題? – Victor

+0

如果列是int類型,MySQL會將'1'解釋爲1。 – Vlad

+0

雖然聲明奏效。正如@Victor所說,我不會推薦在生產中使用它。這根本不安全。 – Vlad