2016-10-22 64 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()。 –