0

我很好,真的很难过这一点。这是我用来激活用户帐户的准备绑定命令:

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

所以活跃的是 MySQL 中的 bit(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` = ?";

无济于事,因为它仍然没有准备声明。还有什么想法吗?

4

3 回答 3

1

您的查询不正确,因此无法正确准备。

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

将是正确的查询(如果您不使用BIT(1)),明智的做法是从具有隐式布尔值的位字段转移到更明确的布尔值:布尔值。

提示:(ALTER TABLE users ALTER COLUMN active BOOL DEFAULT FALSE
BOOL./是 1/0 的别名tinyint(1)TRUEFALSE

这样包装你的准备是一个好习惯,因为准备在失败时返回 false。

false->method()总是会抛出一个致命错误。

if ($query = $db->prepare($sql)) {
    //work on query
} else {
    echo "Query prepare failed";
    echo $sql;
}
于 2013-02-18T23:06:24.147 回答
0

事实证明,我在前面的语句中缺少我的关闭命令的 ()。我用的$stmt->close;不是$stmt->close();它总是最小的东西....

无论如何,我将我的领域改回了一点并且active = b'1'工作得很好 HUZZAR

于 2013-02-19T19:01:45.743 回答
-2

利用

$query = "UPDATE `users` SET `active` = '1' WHERE `UUID` = :i";
于 2013-02-18T23:09:42.113 回答