2015-04-03 81 views
1

我目前正在創建一個登錄系統,其中一部分當然是註冊。直到這一點,我一直在順利進行,在那裏我得到一個錯誤。MYSQL插入語法錯誤與不正確的行號

我已經盡我所能地研究了這個問題,但是我找不到解決方案,因爲它給了我一個不正確的行號。

我得到的錯誤是:

Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1' at line 1 

我的SQL查詢

$token = (round(microtime(true) * 1000)); 
$query = mysql_query("INSERT INTO " 
      . "`users` " 
      . "(name, password, email, token) " 
      . "VALUES " 
      . "('$_POST[user]'" 
      . ",'".hash('sha512',$_POST['pass'])."'" 
      . ",'$_POST[email]'" 
      . ",'$token')") or die(mysql_error()); 
    if (mysql_query($query) === TRUE) { 
     //echo "Sucsessfuly registered! Check your email for a confirmation link."; 
    } else { 
     echo "Error: " . mysql_error(); 
    } 

(這是文件的第一行,它的22D) 當代碼運行,即使它引發錯誤,它仍然正確地將值插入到表中。

此外,當我在phpmyadmin中運行相同的查詢,它運行得很好,沒有錯誤。

我一直在試圖解決這個錯誤在過去3小時所以任何幫助,將不勝感激;)

+0

在SQL錯誤的行號指的是線該查詢,而不是PHP腳本中的行。 – Barmar 2015-04-03 01:16:46

+0

只是一些友好的建議,你應該先清理這些帖子值。你只是要求SQL注入。 http://php.net/manual/en/function.filter-input.php – tier1 2015-04-03 01:18:27

+0

@Barmar這是我的想法,但不知道 – 2015-04-03 01:20:33

回答

1

你打電話mysql_query兩次:先用SQL,然後你使用的結果就像查詢一樣。你得到的錯誤是因爲$querytrue,當作爲字符串處理時,它會變成1

要麼你應該只設置$query到SQL字符串:

$query = "INSERT INTO ..."; 
if (mysql_query($query)) { 
    ... 
} else { 
    ... 
} 

或你應該檢查$query值:

$query = mysql_query(...); 
if ($query) { 
    ... 
} else { 
    ... 
} 
+0

* D'oh!*是的,那樣做。很好的接收。 – 2015-04-03 01:20:48

+0

我不敢相信我沒有注意到,好抓! – 2015-04-03 01:24:23