2013-08-03 3 views
1

Я пытаюсь редактировать базу данных Mysql. Может кто-нибудь сказать мне, почему это не работает, он не обновляет что-нибудьОбновление базы данных mysql

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

$ user_data [ «электронной почты»] работает, я проверил. Я попытался повторить его, и это отразило значение, которое я хотел. Я также проверил базу данных и значение, которое я хочу использовать в полях в электронной почте.

Спасибо за вашу помощь :)

+1

Что говорит mysqli_error()? Вы выбрали запрос, чтобы убедиться, что он правильный? Вы запустили его из командной строки? Вы уверены, что есть строка, которая соответствует этим критериям? –

+1

Является ли '$ con' правильным обработчиком соединения? – DevlshOne

+0

Может возникнуть ошибка # 1064 из-за ** '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

Там ya go, Майк. – ChunkyBaconPlz

+0

Это сработало :) спасибо – user2636368

2

Причина, по которой это не работает, заключается в том, что вы используете часть массива в строке. Для того, чтобы сделать это, у вас есть несколько вариантов:

  1. Используйте фигурные скобки вокруг него:

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

  2. конкатенации:

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

  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]'"

    Это действительно удивило меня что это работает и не бросает уведомления/предупреждения. Далее, однако, делает получения уведомления, так что будьте осторожны (она должна быть в двойных кавычках или возможно Heredoc):

    echo $user_data[email];

    Уведомление: Использование неопределенной постоянной электронной почты - предполагается, «электронная почта»

Однако тот факт, что вы даже не спросив это создает некоторые большие проблемы. Во-первых, вы должны включить error_reporting. Поэтому, если какая-либо ошибка возникает, она будет кричать и кричать на вас, если все будет хорошо. Во-вторых, вы должны do the same for mysqli. И, наконец, если вы используете mysqli, используйте prepared statements. Это именно то, для чего они предназначены.

+0

Я попытался использовать временные переменные, но это не сработало – user2636368

+0

Вы должны быть более конкретными о том, что означает «не работает». Но, как я сказал в своем ответе, подготовленные заявления - это путь. Шутки в сторону. Забудьте об этом по-другому. – Mike

0

Это связано с тем, что одиночные кавычки соответствуют ближайшим к нему. так в коде email='$user_data['email']', первые одиночные кавычки в '$ только соответствует, что в ['email .to избежать этого, вы можете изменить код 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'"; 
Смежные вопросы