2012-08-12 200 views
2

我需要一種機制,將數據從新註冊的用戶插入數據庫。我使用的PDO要做到這一點,這是我當前的代碼:使用PDO插入不插入值

$dbc = new PDO('mysql:host=localhost;dbname=*****', *****, *****); 

$insert_query = $dbc->prepare('INSERT INTO members(name, gender, email, pass) 
VALUES(:name, :gender, :email, :pass) WHERE email = :email LIMIT 1'); 

$insert_query->execute(array(':name' => $name, ':gender' =>  
$gender, ':email' => $email, ':pass' => $pass)); 

然而,當用戶提交註冊表單沒有任何反應。我試圖回顯$gender, $name, $email$pass,他們都顯示正確的值。我是PDO的新手,我不確定這個問題會是什麼。它是某種類型的語法錯誤,還是其他的東西?

我沒有收到任何錯誤消息。

+0

@JaredFarrish他錯了。 – Cranio 2012-08-12 12:08:48

+0

@JaredFarrish我相信它接受他們有或沒有':'。我總是使用它們。 – 2012-08-12 12:08:52

+0

在PHP文檔中,所有命名參數都帶有':'。 @DannyCruzeira,你有沒有測試過任何Db錯誤? (缺少表格,錯誤的字段名稱...?) – Cranio 2012-08-12 12:09:44

回答

5

我不認爲在INSERT聲明中包含LIMIT子句是有效的。 LIMIT不在可選子句in the MySQL INSERT syntax reference之中。

您還有一個WHERE子句,在INSERT語句中也是無效的。

我懷疑你沒有打開錯誤報告,因爲這應該是一個致命的錯誤,或者如果由於語法錯誤導致語句失敗prepare(),則拋出異常。您將收到類似於以下錯誤的錯誤:

錯誤1064(42000):您的SQL語法錯誤;檢查對應於你的MySQL服務器版本的手冊正確的語法使用近「LIMIT 1」

$insert_query = $dbc->prepare('INSERT INTO members(name, gender, email, pass) 
VALUES(:name, :gender, :email, :pass) WHERE email = :email LIMIT 1'); 
//------------------------------------^^^^^^^^^^^^^^^^^^^^^^^^^^^ 

根據定義,INSERT語句插入完全一樣多的行,你有()*爲在你的VALUES(),所以無論如何不需要LIMIT。您可以在INSERT INTO...SELECT...聲明中使用LIMIT,但在這種情況下,LIMITSELECT組件的子句,而不是INSERT

*忽略潛在鍵衝突或其他插入的問題,顯然

你從UPDATE陳述混爲一談多個組件(WHERE,LIMIT),這一事實使我不知道,如果你真的打算這是一個UPDATE而比起首先的INSERT聲明。 INSERT僅適用於新行UPDATE用於更改現有行,並且WHERELIMITUPDATE中都有效。

這將是這樣的:

$upd_query = $dbc->prepare('UPDATE members SET name = :name, gender = :gender, email = :email, pass = :pass) WHERE email = :email LIMIT 1'); 
+0

不,它的意思是一個INSERT語句,因爲該行以前不存在。如果問題不明確,我的意思是該函數應該將用戶輸入的值以註冊形式添加到數據庫中。 – DannyCruzeira 2012-08-12 13:21:24

+0

@Micheal,謝謝。它現在完美。 – DannyCruzeira 2012-08-12 14:00:02

1

爲 「邁克爾」 說,你不能在INSERT查詢中使用LIMIT n

畢竟,在準備的語句中,不能使用兩次具有相同名稱的命名參數標記。

+0

您可以模擬準備和一些最新的PHP版本。 https://bugs.php.net/bug.php?id=48856 – hakre 2012-08-12 12:17:55

+0

@hakra嗯,我相信一個bug,是一個bug! – Fardin 2012-08-12 12:26:20

1

嘗試打開至UPDATE查詢語法。看起來是你需要的。