2017-06-09 50 views
0

我有一個名爲user的Mysql數據庫。這裏是一張圖片: enter image description here向我發送錯誤的SQL語法錯誤

我想以編程方式更改用戶「dodlo.rg」的用戶名。

其實,我有PHP版本7.1。這是我PHPCode的一部分:

編輯的代碼:

$newName= $_POST["changeT"]; 
$userId = $_POST["userId"]; 

     $db = mysqli_connect("trolö", "trolö", "trolö123", "trolö") 
     $sql = "UPDATE user SET username = '$newName' WHERE user_id = '$userId'"; 
     $query = mysqli_query($db, $sql); 
     $response["successU"] = true; 

但我得到的錯誤:「您在您的SQL語法給了一個錯誤;檢查對應於您MariaDB的服務器手冊版本爲在第1行'SELECT * FROM user'附近使用的正確語法「

在此先感謝。

+1

你不需要這個'SELECT * FROM user' – hungrykoala

+0

另外,使用'user_id'作爲更新的參考而不是用戶名。在重複的情況下。 – hungrykoala

+0

@hungrykoala即使每個用戶名只能由一個人使用,我還應該使用user_id嗎? – user7938448

回答

1

問題在於兩個部分。 首先,因爲這個列是一個varchar字段,所以它需要在引號內,否則會產生一個sql錯誤。 其次,後面的SELECT語句無效,但我想這是一個複製/粘貼錯誤。

因此,你的工作代碼應該是:

$newName= $_POST["changeT"]; 

    $db = mysqli_connect("trolö", "trolö", "trolö123", "trolö") 
    $sql = "UPDATE user SET username = '".addslashes($newName)."' WHERE username = 'dodlo.rg'"; 
    $query = mysqli_query($db, $sql); 
    $response["successU"] = true; 

另外,請考慮使用你的WHERE語句的主鍵,而一個varchar字段,因爲它會提高轉速時更復雜的查詢。 (例如,where user_id = 35 instead of where username = 'dodlo.rg')。

最後,但相當重要的是,這段代碼可能容易被sql注入。你需要使用準備好的語句。

1

你要這個查詢轉換成兩個部分

$sql1 = "UPDATE user SET username = $newName WHERE username = 'dodlo.rg'"; 
$sql2 = "SELECT * FROM user";