2012-06-06 2 views
1

Может ли кто-нибудь сказать, почему этот запрос обновления не работает?Запрос на обновление PHP/MYSQL не работает

if ($_GET['update']) { 
include 'config.php'; 
//Connect to MYSQL Database server 
$connect = mysql_connect(DB_HOST, DB_USER, DB_PASS) or die("Could not connect to MYSQL Database."); 
$result = mysql_select_db(DB_NAME, $connect) or die("Could not connect to MYSQL table."); 

mysql_query("UPDATE contact SET read = 1 WHERE id = '$_GET[update]'")or die("Query failed."); 
echo "Update works!"; 
} else { 
echo "Update does not work...ughh."; 
} 

Заранее спасибо.

Редактировать: Я получил запрос на работу. Для тех, кто беспокоился о безопасности, я использовал этот скрипт в качестве теста, чтобы узнать, хочу ли я его использовать. Я просто добавил безопасность теперь, когда скрипт работает. Спасибо всем за помощь и советы.

+1

Были здесь не для отладки кода, какая ошибка поживаешь? – Brendan

ответ

5

Что такое колонка, прочитанная?

mysql_query("UPDATE contact SET read = 1 WHERE id = '$_GET[update]'") 

Судя по отсутствию капитализации читать, я подозреваю, что вы используете зарезервированное слово в MySQL для этого столбца.

См:

Reserved Words in MySQL

Чтобы обойти эту проблему, просто поставить апостроф вокруг чтения. И.Е.

mysql_query("UPDATE contact SET 'read' = 1 WHERE id = '$_GET[update]'") 

Или лучше на j.bruni:

mysql_query("UPDATE contact SET `read` = 1 WHERE id = '$_GET[update]'") 
+0

ЭТО! Спасибо друг! Хаах, я так глуп для использования «чтения». lol Лучший ответ. – Sephiroth

+3

Руководство рекомендует использовать символ «обратного хода» вместо кавычек. –

+0

J.Bruni верен, вместо этого используйте символ обратного хода. – spitfire

0

Вы можете проверить так

mysql_query("UPDATE contact SET read = 1 WHERE id = '".(int)$_GET['update']."'")or die("Query failed."); 

если не эта проблема конкретных

3

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

Подготовленные отчеты: http://php.net/manual/en/pdo.prepared-statements.php

7

Попробуйте для линии запроса:

mysql_query("UPDATE contact SET read = 1 WHERE id = '".$_GET[update]."'")or die("Query failed: " . mysql_error()); 

Обратите внимание на изменение die() заявления для лучшей обработки ошибок:

die("Query failed: " . mysql_error()); 

* Кроме того, просто FYI, вы должны действительно избегать пользовательских переменных (например, переменных GET), чтобы избежать инъекций SQL:

mysql_query("UPDATE contact SET read = 1 WHERE id = '".mysql_real_escape_string($_GET[update])."'")or die("Query failed: " . mysql_error()); 

Пожалуйста, сообщите результат.

+3

+1, потому что OP должен быть прочитан о SQL-инъекции прямо второй раз –

+0

Это не работает. – Sephiroth

+0

Я еще не добавил безопасность! – Sephiroth

3

READ - зарезервированное слово. Вы должны поместить его в backticks или переименовать свое поле.

Посмотрите на эту ссылку:

http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html

+0

Это правильный ответ, ИМО. –

+0

+1, так как мы наконец получили сообщение об ошибке :) – themerlinproject

-1
mysql_query("UPDATE contact SET read = 1 WHERE id = '.$_GET[update].'")or die("Query failed."); 
echo "Update works! 

Пожалуйста, попробуйте не использовать mysql_query. Он старый, и он не эффективен. почему бы не попытаться узнать о PDO и подготовить заявления ..?

Смежные вопросы