Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP准备错误_Php_Mysql_Bit_Prepare - Fatal编程技术网

PHP准备错误

PHP准备错误,php,mysql,bit,prepare,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中,active是一个bit1字段,

我真的被这件事难住了。下面是我用来激活用户帐户的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中,active是一个bit1字段,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_更新;它返回布尔法斯

查询在PHPMyAdmin中运行良好,只是没有得到它的prepare setup=

更新

将字段切换为布尔值,并将我的查询更改为:

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

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

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

UPDATE `users` SET `active` = 1 WHERE `UUID` = ?
如果您不使用位1,那么将是正确的查询,并且明智的做法是从具有隐式布尔性质的位字段移动到更显式的布尔值:布尔值

提示:ALTER TABLE users ALTER COLUMN active BOOL DEFAULT FALSE 布尔是tinyint1的别名。TRUE/FALSE是1/0的别名

这是一个很好的做法来包装您的准备,因为准备失败时返回false

false->method将始终抛出致命错误

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


正确的结果是,我缺少上一条语句中的close命令。我使用$stmt->close;非$stmt->关闭;它总是最小的东西


无论如何,我把我的字段改回了一点,active=b'1'工作得很好HUZZAR

不,它在PHPMyAdmin中运行得不好。SQL查询肯定有语法错误。使用mysqli_error查找.yesp。输入错误:=b'1'刚刚在phpmyadmin中再次检查,没有语法错误。错别字是什么?我应该说对不起,但我已经尝试了1和“1”。请注意,这是一个位字段a,因此b作为数字的前缀为什么不是布尔值?如果你想知道是真是假,就说是真是假。显式优于隐式。请尝试布尔方法。还是一样。我已经更新了主要帖子,这是使用PDO方法,对吗?我不需要在某处声明I吗?您就在这里$stmt_update->bind_param'I',$uuid;您将PDO与mysqli混淆了-bind_参数将值类型和值作为参数,“i”表示整数,$uuid表示值
$query = "UPDATE `users` SET `active` = '1' WHERE `UUID` = :i";