2012-05-18 74 views
2

所以,正在創建一個密碼更改表MySQL錯誤使用INSERT命令

當一些1次修改通過,我將他的用戶名,newpass和PassChange表確認碼,(所以我給他發一封確認郵件後)的想法很簡單,這裏是我使用

$insertResult=mysql_query("INSERT INTO TempChangePass (UserName, NewPass, ConfirmationCode) VALUES ('$UserName', '$newPass', '$code')") or die (mysql_error()); 

的代碼,雖然我得到這個錯誤: 您的SQL語法錯誤;請檢查與您的MySQL服務器版本相對應的手冊,以便在第1行使用「用戶名」,「4da59df8d4007807e7230e0881fbf774」,「16585482」)'附近的正確語法。

注意:表格中的所有列格式設置爲VARCHAR。

連接到mysql數據庫是好的,表名是currect。

這個問題快把我逼瘋了,我實在不明白問題出在哪裏,如果這裏有人能幫助我將提前非常感謝:)

和感謝。

編輯: 我實際上已經解決了這個問題,只爲那些通過搜索解決方案來訪問這篇文章的人,如果你的sql命令有類似的問題,請嘗試回顯它,看看字符串究竟是如何移動到數據庫:-),開心編碼每個人。

而且對不起,如果我浪費您的任何時間:)只是很新的PHP MySQL的&:d

+3

在你的用戶名變量中是否有'''? '的print_r($用戶名)'。然後,開始見面[Bobby tables](http://bobby-tables.com/),並閱讀[預備報表](http://php.net/manual/en/book.pdo.php) – PenguinCoder

+1

嘗試(暫時)更改代碼,以便先組裝查詢,然後轉儲整個查詢,以便查看發生的情況。即'$ q =「INSERT INTO TempChangePass(UserName,NewPass,ConfirmationCode)VALUES('$ UserName','$ newPass','$ code')」;''然後'var_dump($ q)',這樣你就可以看到確切的查詢您正在生成。這應該讓你看到問題出在哪裏。 – Jazz

回答

1

在你的變量中取出單引號。 PHP將它們解釋爲字符串。

$insertResult=mysql_query("INSERT INTO TempChangePass (UserName, NewPass, ConfirmationCode) VALUES ('" . $UserName. "', '" . $newPass. "', '" . $code . "')") or die (mysql_error()); 

此外,你可能想要做這樣的事情:

$sql = "INSERT INTO TempChangePass (UserName, NewPass, ConfirmationCode) VALUES ('" . $UserName. "', '" . $newPass. "', '" . $code . "')"; 

echo $sql; 

採取的回聲,並嘗試手動運行它。

+0

哦,所以在處理varchars時,不需要加引號? – Shady

+0

你仍然想要在他們周圍包裝單引號,但要確保你傳遞的是變量,而不是實際的單詞:'$ username'。如果你看看我提供的代碼行,你會看到我仍然在每個變量前後使用單引號。 – etm124

+1

或者,您可以使用大括號'{$ Username}'來包裝變量,以便更好地區分變量和其餘文本。有時候,這樣閱讀會更容易一些。 – Quantastical

1

它看起來像你在你的實際用戶名中有單引號 - 你實際上傳遞的是'username'而不僅僅是username。嘗試刪除這些,看看它會在那之後起作用。

推薦的方式來處理這個問題(並防止SQL注入)是使用prepared statements,但是如果你真的想,你也許可以做到使用mysql_real_escape_string($UserName)reference

1

這個內嵌看起來像SQL inyection 。我很確定你的$用戶名是$ username =「username'」。看看這個單引號。所以查詢變成了:

$ insertResult =請求mysql_query( 「INSERT INTO TempChangePass(用戶名,NewPass,ConfirmationCode)VALUES('用戶名* '' *, '4da59df8d4007807e7230e0881fbf774', '16585482')」)或死亡(mysql_error ());

+0

我看到了額外的報價,我想:umm,這個報價不應該在這裏,但我的用戶名是這樣的:$ UserName ='username'; – Shady

1

您是否嘗試一列一列查詢?

我的意思是:

INSERT INTO TempChangePass (UserName) values ('$UserName'); 

然後將其添加嗎?

對我來說主要是當我得到錯誤;)

只是一個想法。

1

嘗試在進行查詢之前使用清理腳本。

使用

mysql_real_escape_string() 

編輯

您現在應該使用MySQLi版本

mysqli_real_escape_string() 

或OOP方法

mysqli::real_escape_string() 

Why use MySQLi instead of MySQL?

1

試試這個:

$insertResult=mysql_query("INSERT INTO TempChangePass(UserName, NewPass, ConfirmationCode) VALUES('$UserName', '$newPass', '$code')") or die (mysql_error()); 

你在你的SQL有一些額外的空間。