Столкнулся с проблемой. В следующем коде UPDATE в mysql_query при любых значениях $n и $p возвращает TRUE. Код (Text): <?php //БД создаётся и заполняется нормально $Connection = mysql_connect("localhost", "root"); mysql_query("DROP DATABASE `bd`", $Connection); mysql_query("CREATE DATABASE `bd`", $Connection); mysql_select_db("bd", $Connection); mysql_query("CREATE TABLE `table` (`name` TINYBLOB, `password` TINYBLOB, `key` TINYBLOB)"); mysql_query("INSERT INTO `table` VALUES ('Tester', 'Test', 'TestAccessKey')", $Connection); $n = "n"; $p = "p"; //А вот тут UPDATE всегда выдаёт TRUE if (mysql_query("UPDATE `table` SET `key` = '10' WHERE `name`= '$n' AND `password` = '$p'", $Connection) ){ print ":)"; } else { print ":("; } ?> Если убрать одинарные прямые кавычки (') вокруг $n и $p, то всегда выдаёт FALSE. Даже в таком случае: Код (Text): mysql_query("UPDATE table SET key = 10 WHERE name= Tester AND password = Test", $Connection) В чём проблема? Почему результат не зависит от значений $n и $p?
FALSE говорит о синтаксических ошибках, конечно кавычки здесь нужны )))) TRUE говорит о правильности синтаксиса, но как вы убедились, не значит, что подходящие записи найдены и изменены. Для этого нужно использовать mysql_affected_rows Добавлено спустя 4 минуты 8 секунд: А зачем вам всякий раз делать DROP и CREATE DATABASE ??? жестоко просто жуть! Хотите удалить данные в таблице - используйте truncate table, вся структура сохранится, только таблицы будут пустыми.
Нет, проблема в другом: результат UPDATE не зависит от значений аргументов ($n и $p) вообще! Добавлено спустя 2 минуты 37 секунд: Это чтобы показать, что база данных создаётся с нуля, и что проблема в коде никак с ней не связана.
результат update это состояние данных в таблице, а не true или false в php-срипте. вы делаете неправильные выводы из собственных ошибок. Добавлено спустя 1 минуту 58 секунд: ну чтобы "показать", сделайте реально печать данных из таблицы, это будет настоящий РЕЗУЛЬТАТ
Всё, допёр. Спасибо. Надо было не Код (Text): if (mysql_query("UPDATE `table` SET `key` = '10' WHERE `name`= '$n' AND `password` = '$p'", $Connection) ){ а Код (Text): if (mysql_query("UPDATE `table` SET `key` = '10' WHERE `name`= '$n' AND `password` = '$p'", $Connection) && mysql_affected_rows($Connection) ){ (при условии, что key будет каждый раз не совпадать с заменяемым значеним) P.S.: Просто не хотелось обходить таблицу 2 раза (вначале искать игрока с такими именем и паролем, а потом уже менять ему код доступа на свежесгенерированный), а сделать всё за раз (мол, если игрок с таким именем и паролем обновится, то выдать ему новый код, иначе - такой игрок не найден). Добавлено спустя 8 минут 22 секунды: Ладно, вот более точная формулировка проблемы: "Нет, проблема в другом: результат возвращемый mysql_query после выполнения запроса UPDATE не зависит от значений аргументов ($n и $p) вообще!" Напечатать единственную тестовую запись? Мне кажется и так всё видно.