我很好,真的很难过这个。这是我用来激活用户帐户的prepare bind命令:
$query = "UPDATE `users` SET `active` = b'1' WHERE `UUID` = ?";
$stmt_update = $mysqli->prepare( $query );
$stmt_update->bind_param( 'i' , $uuid );
$stmt_update->execute();
如此活跃是MySQL中的一个(1)字段,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中正常运行只是没有让它准备好设置=¬(
更新
将字段切换为布尔值并将我的查询更改为:
$query = "UPDATE `users` SET `active` = 1 WHERE `UUID` = ?";
无济于事,因为它仍未准备声明。还有更多想法吗?
答案 0 :(得分: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的别名
最好将您的准备包装起来,因为prepare在失败时返回false。
false->method()
总会引发致命错误。
if ($query = $db->prepare($sql)) {
//work on query
} else {
echo "Query prepare failed";
echo $sql;
}
答案 1 :(得分:0)
正确的结果是我在前面的陈述中缺少()我的关闭命令。我正在使用$stmt->close;
而不是$stmt->close();
它始终是最小的东西......
无论如何,我把我的领域改回了一点,active = b'1'
工作得很好HUZZAR
答案 2 :(得分:-2)
使用
$query = "UPDATE `users` SET `active` = '1' WHERE `UUID` = :i";