2012-02-27 7 views
2

フェッチ内のネストされた関数(別の関数の内部にある)は実行されません。mysqli prepared statement - ネストされた関数が実行されない

fn_smth1はfn_smth2の内部にネストされているべきでありfn_smth2

例を介して、出力結果は、以下の単純化されたバージョンです。

 
function fn_smth1 ($id){ 
    global $mysqli; 
    $stmt = $mysqli->stmt_init(); 
    if ($stmt->prepare("SELECT code FROM at WHERE id = ?")){ 
     $stmt->bind_param("i",$id); 
     $stmt->execute(); 
     $stmt->bind_result($code); 
     if ($stmt->fetch()){ 
      $code_displ = $code; 
     } 
    } 
    $stmt->close; 
    return $code_displ; 
} 


function fn_smth2($id){ 
    global $mysqli; 
    $stmt = $mysqli->stmt_init(); 
    if ($stmt->prepare("SELECT idx, name FROM at WHERE id = ?")){ 
     $stmt->bind_param("i",$id); 
     $stmt->execute(); 
     $stmt->bind_result($idx, $name); 
     if ($stmt->fetch()){ 
      $code_displ = $name.' === '.fn_smth1($idx); 
     } 
    } 
    $stmt->close; 
    return $code_displ; 
} 


echo fn_smth2(1); 

を期待//ここにいくつかの名前は、ここではいくつかのコード

//が

を受け===

ここにいくつかの名前===ヌル(関数fn_smth1値を与えるものではありません)

答えて

2

2番目のprepared statementを実行しようとしていますが、最初のものからの結果セットはまだ格納されていません。 2番目のステートメントを実行する前にmysqli_stmt::store_result()を使用してください。

+0

ヒントありがとうございます - あなたは正しい、そのネストされた関数は明らかに準備されたものを使用します – Jeffz

関連する問題