准备语句返回false但插入成功
问题描述:
我还是新来的PHP和MYSQL,当我运行准备语句插入一些数据的数据库时,它返回false,但是我可以看到数据库中的新行,任何人都知道为什么?我很感激任何帮助。我花了几个小时找出来,但没有运气。它只发生在INSERT语句上。它 这里是我的代码准备语句返回false但插入成功
$query = "INSERT INTO BbUsers(u_username,u_passhash,u_emailaddr,u_validate) VALUES(?,?,?,?)";
$refArr = array("ssss", $username, $passhash, $email, $vaildHash);
$result = cleanQuery($query, $refArr);
if ($result2) {
sendEmail($email, $hash);
} else {
echo "OOps something went wrong plz try again";
exit;
}
这里是准备语句的函数
function cleanQuery($prepareState,$Arrs)
{
global $dbcon;
$refArr=array();
$res=$dbcon->prepare($prepareState);
$ref= new ReflectionClass('mysqli_stmt');
$method=$ref->getMethod("bind_param");
foreach($Arrs as $key => &$value)
{$refArr[] = &$value;
}
$method->invokeArgs($res,$refArr);
$res->execute();
$result=$res->get_result();
return $result;
}
我试图从$资源和$ dbcon,它返回0 这里得到错误信息的数据库的外观像
CREATE TABLE BbUsers(
u_userid INTEGER PRIMARY KEY AUTO_INCREMENT ,
u_username CHAR(60) UNIQUE ,
u_passhash CHAR(100) ,
u_emailaddr CHAR(255) UNIQUE ,
u_created TIMESTAMP ,
u_lastlogin TIMESTAMP ,
u_validate CHAR(40),
INDEX (u_username , u_emailaddr)
);
还有什么我错过了?
答
mysqli_stmt :: get_result
返回成功的SELECT查询结果集,或FALSE其他DML查询或失败。 mysqli_errno()函数可用于区分这两种类型的故障。
因此$res->get_result()
只适用于您期望的select
。
要检查您准备的语句被正确执行,也可以直接使用返回参数execute:
mysqli_stmt ::执行
成功返回TRUE或FALSE的失败。
你应该使用两种不同的功能,一个用于select
-statements返回结果集(你的方式要fetch()
,否则进一步查询,将无法正常工作,阅读说明在documentation to execute()
)另一个用于其他报表,返回true
或false
。
而且您显然必须用if ($result) {
替换if ($result2) {
,但我认为这只是一个错字。
非常感谢,这完全解决了我的问题,$ result2只是一个类型错误。正如你所说,我认为我需要另一个函数来检查execute()。 –