2017-06-21 2 views
-2

私は準備された文の関数を記述しようとしていますが、私は、コードを実行すると、それは私にエラーを与えて次のようにステートメント機能 - スコープエラー

mysqli_stmt_store_result() expects parameter 1 to be mysqli_stmt, null given 

My機能はなります

function fn_preparedStatement($query, $types, $values){ 
    global $dbconnection; 
    if (!$dbconnection) { 
     die("Function wm_dynamicForm connection failed.</br>"); 
    } 
    $db = mysqli_stmt_init($dbconnection); 
    if (mysqli_stmt_prepare($db, $query)) { 
     mysqli_stmt_bind_param($db, $types, ...$values); 
     if (!mysqli_stmt_execute($db)) { 
      echo "Execute Error: " . mysqli_error($dbconnection); 
     } 
    } else { 
     echo "Prep Error: " . mysqli_error($dbconnection); 
    } 
} 

はその後、私のコードで私が持っている:

$query = "SELECT * FROM Contacts WHERE First_Name = ?"; 
    $types = "s"; 
    $values = array("Mike"); 
    fn_preparedStatement($query, $types, $values); 
    mysqli_stmt_store_result($db); //im getting the error on this line - null 

だから、イム思考私の問題は、スコープの問題です。私はこの仕事をするために私の機能から何を "返す"か分からない。コードをインラインで書くとうまく動作します。準備されたステートメントを関数に移動し、インラインコードを関数imに置き換えてエラーになったときです。誰かが私がどこを乱しているか教えてもらえますか?どうもありがとうございます。

+0

からのステートメントハンドルを返す必要があります。 – aynber

+0

@ user982853私はそれについて私のコメントを削除しました、私は瞬時に混乱していました。 '$ db'はこのようなことをするときに使う良い変数ではなく、もしあればもっと' $ query'のようなものでなければなりません。あなたのコードはかなり混乱しています。 –

+0

'$ db'はどこから来ましたか?あなたは関数からステートメントハンドルを返さないので、それは魔法です – RiggsFolly

答えて

0

あなたは `$のdb`を返す必要があり、または私はあなたがあなたのDBの関数を作成している方法を再考することをお勧めしたい機能

function fn_preparedStatement($query, $types, $values){ 
    global $dbconnection; 
    if (!$dbconnection) { 
     die("Function wm_dynamicForm connection failed.</br>"); 
    } 
    $db = mysqli_stmt_init($dbconnection); 
    if (mysqli_stmt_prepare($db, $query)) { 
     mysqli_stmt_bind_param($db, $types, ...$values); 
     if (!mysqli_stmt_execute($db)) { 
      echo "Execute Error: " . mysqli_error($dbconnection); 
     } 
    } else { 
     echo "Prep Error: " . mysqli_error($dbconnection); 
    } 

    // 
    return $db; 
    // 
} 

// main line code 
$query = "SELECT * FROM Contacts WHERE First_Name = ?"; 
$types = "s"; 
$values = array("Mike"); 

// accept the stantement handle from the function 
$db = fn_preparedStatement($query, $types, $values); 

// so now you can use it 
mysqli_stmt_store_result($db); //im getting the error on this line - null 
+0

それはうまくいった!私は自分のコンピュータで過ごす時間が長すぎると思う。私は関数に戻り値を追加しますが、コード内で結果をvarに入れるのを忘れてしまいました。どうもありがとうございます。時にはそれが必要なのは目の第二のセットです。 – user982853

関連する問題