2013-02-18 3 views
0

Я нахожусь в полном разгаре. Вот подготовить команду привязки, которую я использую, чтобы активировать учетную запись пользователей:PHP подготовить ошибку

$query = "UPDATE `users` SET `active` = b'1' WHERE `UUID` = ?"; 
$stmt_update = $mysqli->prepare($query); 
$stmt_update->bind_param('i' , $uuid); 
$stmt_update->execute(); 

Так активна немного (1) поле в MySQL и UUID является пользователями уникального ID и когда я запускаю его я получаю сообщение об ошибке :

Fatal error: Call to a member function bind_param() on a non-object in /websites/.../activate.php on line 34 

у меня есть еще один запрос, который выполняется на странице, и я закрыть его с $stmt->close;

Я попробовал var_dump($stmt_update);, который возвращает bool(false)

Запрос работает нормально в PHPMyAdmin просто не получить его подготовим установить = ¬ (

UPDATE

Switched поле для булева и изменил мой запрос к этому:

$query = "UPDATE `users` SET `active` = 1 WHERE `UUID` = ?"; 

Нет поскольку он все еще не готовит заявление. Есть еще идеи?

+2

Нет, он не бежит отлично в PHPMyAdmin. SQL-запрос, безусловно, имеет синтаксическую ошибку. Используйте mysqli_error(), чтобы узнать. – mario

+0

yep. typo there: '= b'1'' – Peter

+0

Только что проверили в phpmyadmin и нет синтаксических ошибок. что такое опечатка? – MrFuji87

ответ

0

Right Оказывается, я отсутствовал() из моей команды закрытия сформировать предыдущее заявление. Я использовал $stmt->close; не $stmt->close(); это всегда маленькие вещи ....

Во всяком случае, я изменил свое поле обратно немного и active = b'1' работал прекрасный HUZZAR

1

Ваш запрос неверен и, следовательно, будет подготовлен неправильно.

UPDATE `users` SET `active` = 1 WHERE `UUID` = ? 

Было бы правильно запрос (ты не используя BIT(1)), и это разумно, чтобы перейти от битового поля с неявным булевой-Несс к чему-то более явном виде: логическое логическое.

Совет: ALTER TABLE users ALTER COLUMN active BOOL DEFAULT FALSE
(. BOOL является псевдонимом tinyint(1)TRUE/FALSE являются псевдонимами 1/0)

Это хорошая практика, чтобы обернуть ваш готовится как таковой, потому что готовить возвращается ложные на провал.

false->method() всегда будет генерировать фатальную ошибку.

if ($query = $db->prepare($sql)) { 
    //work on query 
} else { 
    echo "Query prepare failed"; 
    echo $sql; 
} 
+0

Я должен был пожалеть, но я пробовал с 1 и 1. Обратите внимание, что это бит поле хорошо, поэтому b префикс номер – MrFuji87

+0

Почему это не логическое? если вы хотите true или false, сделайте это true или false. Явный лучше, чем неявный. – Amelia

+0

Пробовал логический метод. все такой же. Я обновил главный пост – MrFuji87

-2

использование

$query = "UPDATE `users` SET `active` = '1' WHERE `UUID` = :i"; 
+0

Это использует этот метод PDO? Разве мне не нужно объявлять i где-то? – MrFuji87

+0

У вас есть это прямо здесь '$ stmt_update-> bind_param ('i', $ uuid);' – Jung3o

+1

Вы путаете PDO с mysqli - 'bind_param()' принимает тип значения и значение как параметры, 'i' для целых чисел и $ uuid - значение –