2011-09-15 15 views
0

クエリがフェッチに失敗します。それは私のSQLコンソールでうまく動作するので、私は迷っています。ここにコードがあります。mySQLi Prepared Statement:Fetch()Fail

$q_st = "SELECT tryouts.playerFName,tryouts.playerLName,tryouts.mainEmail, 
tryouts.secondEmail, players.number FROM tryouts LEFT JOIN players ON 
players.userID=tryouts.userID WHERE players.team = ? 
ORDER BY tryouts.playerLName"; 

$stmt = $GLOBALS['m']->prepare($q_st); 
$stmt->bind_param("s",$GLOBALS['c_team']); 
$stmt->execute(); 
$stmt->bind_result($pfn,$pln,$em,$em2,$num); 

if($stmt->fetch()==false) 
{ 
echo($GLOBALS['m']->error . $GLOBALS['m']->sqlstate ." Haha It doesn't work and YOU  don't know why!!!"); 
} 
else 
{ 
while($stmt->fetch())     { 
static $count3; 
echo ($pfn . " " . $pln . " " . $num . "<input type=\"checkbox\" class=\"player\" value=\"" . $em ."\" id=\"player ". ++$count3 . "\"><br />"); 
}    
} 

結果は "00000ハハそれは動作しません、あなたはわからない理由!!!"

私は他のすべてのstmtパラメータをテストしましたが、すべて成功しています。 アイデアnullとを返すことができるmysqli_stmt_fetch()方法として

答えて

1

false返された値がfalseであるかどうかをチェックするために===を使用する必要があります(またはそれがnullであるかどうか)。それ以外の場合は戻り値nullをエラーコードとして解釈します。

さらに、コードは最初のfetch()呼び出しで結果から1行を読み取りますが、返された行は決して処理されません。あなたが望むものではないかもしれない結果セットの最初の行を削除しています。

結果セットに使用されている行の数を知りたい場合は、mysqli_stmt_num_rowsを使用します。

+0

mysqli_stmt_num_rowsは0を返します。影響を受ける行は-1を返します。エラーまたはエラーはありません。これ以上のアイデアは? – narotosensei

+0

私はそれをちょっとやっていましたが、何らかの理由でそれが今働いています。 Go figure。参考にしていただきありがとうございます! – narotosensei