2016-10-22 69 views
0

我还是新来的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) 
); 

还有什么我错过了?

回答

0

documentation

mysqli_stmt :: get_result

返回成功的SELECT查询结果集,或FALSE其他DML查询或失败。 mysqli_errno()函数可用于区分这两种类型的故障。

因此$res->get_result()只适用于您期望的select

要检查您准备的语句被正确执行,也可以直接使用返回参数execute

mysqli_stmt ::执行

成功返回TRUE或FALSE的失败。

你应该使用两种不同的功能,一个用于select -statements返回结果集(你的方式要fetch(),否则进一步查询,将无法正常工作,阅读说明在documentation to execute())另一个用于其他报表,返回truefalse

而且您显然必须用if ($result) {替换if ($result2) {,但我认为这只是一个错字。

+0

非常感谢,这完全解决了我的问题,$ result2只是一个类型错误。正如你所说,我认为我需要另一个函数来检查execute()。 –