0

私は元気で本当にこれに困惑しています。これは、ユーザーアカウントをアクティブ化するために使用しているpreparebindコマンドです。

$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で正常に実行され、prepare setup =¬(

アップデート

フィールドをブール値に切り替え、クエリを次のように変更しました。

$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。/のエイリアスtinyint(1)ですTRUE。/FALSEは1/0のエイリアスです)

prepareは失敗するとfalseを返すため、prepareをそのようにラップすることをお勧めします。

false->method()常に致命的なエラーをスローします。

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

前のステートメントからのcloseコマンドの()が欠落していたことがわかりました。私は使って$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 に答える