PHP准备错误

时间:2013-02-18 22:55:59

标签: php mysql bit prepare

我很好,真的很难过这个。这是我用来激活用户帐户的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` = ?";

无济于事,因为它仍未准备声明。还有更多想法吗?

3 个答案:

答案 0 :(得分:1)

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

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

将是正确的查询(如果你没有使用BIT(1)),并且明智地从具有隐式布尔值的位字段移动到更明确的布尔值:布尔值。

提示:ALTER TABLE users ALTER COLUMN active BOOL DEFAULT FALSE
BOOLtinyint(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";