2015-02-06 148 views
-1

它不會更新數據庫中的一行 它只是一個語言更改系統,當我想到它是因爲轉義後字符串,然後我沒有傳遞給查詢字符串,它仍然不會工作 因此,這裏的代碼mysqli查詢不會更新

$whatlanguage = $_GET['languageoption']; 
$sql = "UPDATE people SET language=bosanski WHERE id='$user_id'"; 
$_POST['settingsuccess'] = 1; 
if (!mysqli_query($con, $sql)) 
{ 
    echo "Error: " . mysqli_error($con); 
} 

錯誤

Error: Unknown column 'bosanski' in 'field list'

+0

'語言= bosanski'這是一個字符串;像這樣對待它。 – 2015-02-06 17:24:09

+1

那裏的$ whatlanguage是什麼?你不會在任何地方使用它,並且'$ user_id'永遠不會被定義......再加上,無條件地設置'settingsuccess'是無意義的。你應該只在你確認成功之後做到這一點。 – 2015-02-06 17:26:03

+0

**使用外部變量構建SQL語句會使您的代碼容易受到SQL注入攻擊。**此外,任何帶有單引號的輸入數據(如「O'Malley」)都會炸掉您的查詢。瞭解參數化查詢,最好使用PDO模塊來保護您的Web應用程序。 [這個問題](http://stackoverflow.com/questions/60174)有很多詳細的例子。另見http://bobby-tables.com/php查找危險的替代品和解釋。運行使用外部數據構建的SQL代碼就像在家門口發現用成分製成的湯一樣。 – 2015-02-06 17:28:59

回答

3

你要引用你的字符串,否則MySQL的認爲你要求它看另一列在同一個表

$sql = "UPDATE people SET language='bosanski' WHERE id='$user_id'"; 

我也希望$user_id不是原始post變量,因爲,你知道,SQL Injection

+0

好的,但是當我放入字符串它仍然不會更新 – Champa 2015-02-06 17:26:08

+2

那麼,是什麼'$ user_id'?試試'echo $ sql;'並查看實際發送到數據庫的內容 – Machavity 2015-02-06 17:29:44