2013-08-03 71 views
1

我想編輯一個Mysql數據庫。有人可以告訴我爲什麼這是行不通的,它不會更新任何東西更新一個mysql數據庫

mysqli_query($con,"UPDATE Users SET day_started=1 WHERE email='$user_data['email']'"); 

$ user_data ['email'] works我檢查了它。我試着迴應它,它確實迴應了我想要的價值。我還檢查了數據庫和我想要的電子郵件字段的值。

謝謝您的幫助:)

+1

mysqli_error()說什麼?你是否迴應了查詢以確保它是正確的?你是否從命令行運行它?你確定有一行符合該標準嗎? –

+1

'$ con'是否是正確的連接處理程序? – DevlshOne

+0

由於**'email ='$ user_data ['email']'** ** – hjpotter92

回答

4

試試這個:

$user_email = mysqli_real_escape_string($con, $user_data['email']); 

mysqli_query($con,"UPDATE `Users` SET `day_started`='1' WHERE `email`='".$user_email."'"); 

我懷疑,答案就在你的查詢字符串您無法正常嵌入PHP變量。看看$user_email兩側的性感滿座。當你這樣做時,PHP喜歡它。

我還清理了你的輸入和東西,並用反引號格式化了你的查詢,因爲PHP也喜歡這樣。

+0

這並沒有真正回答這個問題。問題是「有人能告訴我爲什麼這不起作用嗎?」。 – Mike

+1

還有,邁克。 – ChunkyBaconPlz

+0

這工作:)謝謝 – user2636368

2

這不起作用的原因是因爲您正在使用字符串中的數組的一部分。爲了做到這一點,你有幾種選擇:

  1. 使用它周圍的花括號:

    "UPDATE Users SET day_started=1 WHERE email='{$user_data['email']}'"

  2. 級聯:

    ​​

  3. 使用臨時變量:

    $email = $user_data['email'];

    然後在您的字符串:

    "UPDATE Users SET day_started=1 WHERE email='$email'"

  4. (獎金,我剛剛得知這個我自己)圍繞email刪除引號:

    "UPDATE Users SET day_started=1 WHERE email='$user_data[email]'"

    它實際上是讓我吃驚這是有效的,不會發出通知/警告。下面,然而,生產的通知,所以一定要小心(它需要在雙引號的字符串或可能定界符):

    echo $user_data[email];

    注意:使用未定義的常量電子郵件 - 假設「電子郵件」

但是事實上,你甚至問這帶來了一些重大問題。首先,你應該打開error_reporting。因此,如果發生任何錯誤,如果一切順利的話,它會對你大喊大叫。其次,你應該do the same for mysqli。最後,如果您使用的是mysqli,請使用prepared statements。這正是他們的目標。

+0

我曾嘗試使用臨時變量,但它不起作用 – user2636368

+0

您需要更具體地說明「沒有工作」是什麼意思。但就像我在答覆中所說的那樣,準備好的陳述是要走的路。認真。忘記做任何其他方式。 – Mike

0

這是因爲最接近它的單引號匹配。 所以在你的代碼email='$user_data['email']',在'$第一單引號只匹配在['email。爲了避免這種情況,你可以修改你的SQL代碼:

"UPDATE Users SET day_started=1 WHERE email='$user_data[email]'",this really works. 

或只是這樣做:

$post_email = $user_data['email']; 
"UPDATE Users SET day_started=1 WHERE email='$post_email'";