2016-10-22 25 views
0

私はまだPHPとMYSQLに新しいので、データベースの一部のデータを挿入するprepare文を実行するとfalseを返しますが、データベースの新しい行を見ることができます。どうして?私はどんな助けにも感謝します。私は数時間を使い果たしましたが運がありません。 INSERT文でのみ発生します。そして、それはここで私は、それはここでは0 を返す$解像度と$ DBCONからのエラー情報を取得しようとしました準備文が返されますが、正常に挿入されます

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; 
} 

私のコードここ

$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; 
} 

文の準備をするための機能です はデシベルルックスをですlike

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クエリの結果セットを返し、または他のDMLクエリの失敗した場合にFALSE。 mysqli_errno()関数は、2つのタイプの失敗を区別するために使用できます。

したがって$res->get_result()は、selectと同じように動作します。

ご準備されたステートメントが正常に実行された場合、あなたは直接executeの戻りパラメータを使用することができます確認するには:

mysqli_stmt ::成功した場合にTRUEを、失敗した場合にFALSE

返しを実行します。

あなたはおそらく(documentation to execute()にノートを読んで、それ以外の場合は、さらにクエリは動作しません、やり方によってあなたはfetch()に持っている)2つの異なる機能、結果セットを返すselect -statementsのための1つを使用する必要があり、もう1つはtrueまたはfalseを返します。

あなたは明らかにif ($result2) {if ($result) {と置き換える必要がありますが、それは単に誤植であると思います。

+0

ありがとう、これは私の問題を完全に解決しました。$ result2は単なる型エラーです。あなたが言ったように、私はexecute()をチェックする別の関数が必要だと思います。 –

関連する問題