2014-02-16 52 views
1

我需要在php中創建SQL更新語句,並且我的列名稱需要是變量。 我從jQuery的AJAX POST方法這些變量和我有他們在PHP:SQL變量列中的PHP變量

$variable = $_POST['variable']; 
$row = $_POST['row']; 
$field = $_POST['field']; 

當我贊同他們,我得到正確的值,例如:

echo $variable; 
echo $row; 
echo $field; 

和我 - martins,2,名字。在我的數據庫中,我有名字 - 名字的列。所以,我儘量讓這個聲明(我知道我需要使用事先準備好的聲明,但那是另一個問題)

$sql = 'UPDATE ajax_example SET '.$field.'= "'.$variable.'" WHERE id = "'.$row.'"'; 
mysql_query($sql) or die (mysql_error()); 

如果我改變「 $領域。」名稱 - firstname,那麼更新成功,所以$變量和$行被正確定義,但我需要這個列名作爲變量。我看過大約15個帖子,我已經嘗試了每個軟管代碼,但沒有任何內容。這真的不可能嗎?

+0

讓您遠離輸入變量,請不要用'mysql_'功能了,使用'mysqli_'或'PDO ' – JamesHalsall

+1

1.不要使用'mysql_'。他們被棄用(並且已經有幾年)。使用'mysqli_'或'PDO'。其次,這段代碼瘋狂地不安全。 – h2ooooooo

+1

請你逃避你的輸入變量。將它們直接傳遞給聲明將打開經典攻擊的大門,稱爲「SQL注入」。 – fuesika

回答

3

你需要逃避你的變數,給您的上下文一個基本的例子...

$conn = mysqli_connect(/* config */); 
$sql = 'UPDATE ajax_example SET ' . mysqli_real_escape_string($conn, $field).'= "' . mysqli_real_escape_string($conn, $variable) . '" WHERE id = "' . mysqli_real_escape_string($conn, $row) . '"'; 
mysqli_query($conn, $sql); 
+0

謝謝!這工作! :)但爲什麼逃生是如此必要?並且我應該使用PDO? PDO有一些非常大的優勢? – user3316619

+0

@ user3316619準備好的語句總是優於將變量粘貼到查詢中。見[mysql_real_escape_string'足以清理用戶輸入](http://stackoverflow.com/questions/2353666/php-is-mysql-real-escape-string-sufficient-for-cleaning-user-input)。 – h2ooooooo

+0

@ h2ooooooo'mysql_real_escape_string'是不夠的,但'mysqli_real_escape_string'很好 - 因爲它逃脫了你提供的連接 - 而'mysql_'變體沒有 - PDO **更好,但它是一個與OP有什麼大的偏差 – JamesHalsall