2017-03-06 6 views
0
<?php 
require_once 'functions.php'; 
try{ 
    $stmt=$connection->prepare(" 
    SELECT ACT_ID, NAME, COST, DESCRIPTION, EXTRA_DETAILS, REFID,IMAGE 
    FROM ACTIVITIES 
    WHERE ACT_ID = ? 
    "); 
    $stmt->bind_param("i",$_GET['id']); 
    $stmt->execute(); 
    $result=$stmt->get_result(); 
    $actData=getAllData($result); 

    if (isset($_SESSION["user_id"]) && $_SESSION["user_id"] != ""){ 

     $stmt=$connection->prepare(" 
     SELECT id 
     FROM google_users 
     WHERE id=? AND gender IS NOT NULL 
     "); 
     $stmt->bind_param("i",$_SESSION['user_id']); 
     $stmt->execute(); 
     if ($stmt->fetch()){ 
     $actData[0]["HAS_USER_INFO"]=TRUE; 
     } 

     //PROBLEM STATEMENT1############################## 
     $stmt=$connection->prepare("   
     SELECT `REG_ID` 
     FROM `ACTIVITY_REGISTRATION` 
     WHERE `USER_ID` = ? AND `ACTIVITY` =? 
     "); 
     $stmt->bind_param("ii",$_SESSION['user_id'],$_GET['id']); 
     $stmt->execute(); 
     if ($stmt->fetch()) { 
     $actData[0]["REGISTERED"]=TRUE; 
     } 
    } 

    //PROBLEM STATEMENT2#########################3 
    $stmt=$connection->prepare("   
     SELECT O.`COST`, O.`DESCRIPTION`, O.`OPTION_ID` 
     FROM `ACTIVITIES` A, `ADD_OPTIONS` O 
     WHERE `ACT_REF` = `REFID` AND `ACT_REF` = ? 
    "); 
    $stmt->bind_param("s",$actData[0]["REFID"]); 
    $stmt->execute(); 
    $result=$stmt->get_result(); 
    $opData=getAllData($result); 
    }catch(Exception $e){ 
     echo $e->getMessage(); 
    } 

    $stmt->close(); 
?> 

上で問題なく動作した場合にスローされている致命的なエラーです:なぜ私は致命的なエラーが出てきた文は、自分の

(メンバ関数のbind_paramへの呼び出し)「問題文2」のブール値に

何I

1)SQLでエラーをチェックしました:私はphpmyadminとphp(ther own上)で "quotesの有無にかかわらず実行しましたが、どちらの問題文にもエラーはありませんでした。私もバインドせずに非常に単純なSELECT *ステートメントに縮小しようとしたが、それでも失敗します。

2の代わりに$ stmtはをオーバーライドする)割り当てられた固有の変数:エラーに変化がない

3)列名、データ型および制限付きの単語をチェックする:それらはすべて

4をチェックアウト)は有界変数の値をチェックします:それらはすべて私が見つけた何

存在:

を奇妙に、私は問題文1、文2 PROBLEM iはPを削除する場合も同様に、エラーなしで実行されます削除した場合ROBLEM STATEMENT2コードの残りの部分は正常に機能し、コード内の位置を入れ替えると、エラーは常に先頭のステートメントに移動します。

これはなぜ起こっているのでしょうか?

+1

ここで他のスレッドに基づいて、エラーの理由を得るには、 '$ db-> errorInfo()'と '$ db-> errorCode()'を使用してください。 – Swellar

+0

mysqli(私の場合は$接続) - > errnoとエラーはどちらもそれぞれ障害発生時に0と ""を返します –

答えて

0

ソリューションはここに発見された:MySQLi failing to prepare a statement

文の引用:

you probably bumped into the problem that you can't create an other statement while there are still results/result sets pending for the previous statement. see http://docs.php.net/mysqli-stmt.close :

文を閉じると、問題を解決し、新しいものを開くことを。この問題に遭遇する可能性のある他の人にとって、あまりにも多くのプリペアドステートメントを順番に実行するのではなく、それ自身の実行と終了を処理する各ステートメント用の関数を作成することが良い方法です。これにより、潜在的な結果の蓄積を防ぐことができます。