2017-02-12 55 views
-1

我想用PHP做一個註冊頁面,然後當我寫下它的mysql語句時我不會接受它,而是會吐出一個我現在想弄幾個小時的錯誤。SQL語法錯誤MariaDB服務器版本在第1行使用'@ hotmail.com,Employee'附近的正確語法''

$query = "INSERT INTO users(username, password,name,surname,email,role)VALUES($username, $password,$name,$lastname,$email,$role)"; 
    $stmt = mysqli_prepare ($dbh, $query) or die(mysqli_error($dbh)); 

顯示的錯誤是:

您的SQL語法錯誤;檢查對應於您MariaDB的服務器版本正確的語法使用近「@ hotmail.com,員工)」在行手動1.

回答

3

確保你如果插入字符串使用適當的引號:

$query = "INSERT INTO users(username, password,name,surname,email,role)VALUES('$username', '$password','$name','$lastname','$email','$role')"; 
0

你開始使用準備好的語句,但是你轉過身來直接將變量插入到查詢中 - 不要那麼做,因爲它直接違背了使用prepare()的目的。改爲綁定你的變量。來到

$query = "INSERT INTO users(username, password, name, surname, email, role) VALUES (?, ?, ?, ?, ?)"; 
$stmt = mysqli_prepare($dbh, $query) or die(mysqli_error($dbh)); 
$stmt->bind_param('sssss', $username, $password, $name, $lastname, $email, $role); 
$stmt->execute(); 
$stmt->close(); 

你原來的錯誤,由於缺乏周圍的查詢字符串引號,但使用與佔位符預處理語句時,你不應該有它的。

如果您在插入的變量上使用了mysqli_real_escape_string(),現在應該刪除 - 因爲這些變量現在在查詢中進行了參數化。

請參見以下鏈接和文件

0

對於你不應該使用查詢中的變量安全原因。

而是使用此:

$stmt = mysqli_prepare($link, "INSERT INTO users(username, password,name,surname,email,role)VALUES(?,?,?,?,?,?)"); 
mysqli_stmt_bind_param($stmt, 'ssssss', $password, $name, $surname, $email, $role); 
mysqli_stmt_execute($stmt); 

在PHP的文檔看看

相關問題