2017-12-28 37 views
1

これの前半は正しく動作します。 $selectedVerb$verbNumの両方が正常に戻って表示されます。私は次のクエリで$verbNumを使用しようとすると、エラーが生じ続ける:myslqiクエリは、準備されたステートメントの後にブール値を返し続けます。

Fatal error: Uncaught Error: Call to a member function fetch_array() on boolean; Stack trace: #0 {main} thrown.

コード:手続き的な方法で

if ($stmt = $dbc->prepare("SELECT verbNum FROM verblist WHERE mainVerb = ? ")){ 

    $stmt->bind_param("s", $selectedVerb); 

    $stmt->execute(); 

    $stmt->bind_result($verbNum); 

    $stmt->fetch(); 

    echo '<span>'.$selectedVerb.' is part of verb number: '.$verbNum. '</span>'; 

    settype($verbNum, "integer"); 

    $verbListarray = mysqli_query($dbc, "SELECT mainVerb FROM verblist WHERE verbNum = $verbNum"); 

    while($row = $verbListarray->fetch_array()) 
    { 
     echo $row['mainVerb']; 
     echo "<br />"; 
    }  

    $stmt->close(); 
} 
+3

[理由を知る](http://php.net/manual/en/mysqli.error.php)してください。 – Sammitch

+0

最初に文字列を使用していますが、それを整数として渡すようにしようとしていますか?*うまくいきません。 –

+0

チェックは、 '' '$ verbListarray'''が真か偽かをチェックします。 falseの場合、クエリの失敗が原因である可能性があります。 – Wolen

答えて

1

ミキシングOOPの道に行くには良い方法ではないので、好きです -

+0

snarkで答える代わりに実際に私にある方向を与えてくれてありがとう。あなたが投稿したものはまだ私にエラーを与えています:致命的なエラー:未知のエラー:未定義のメソッドを呼び出すmysqli_stmt :: fetchAll() –

+0

@ scott.schafferそれでは 'fetch()'を使ってください。編集した解決策を確認してください –

+0

* "OOPのやり方を手続き的な方法で混ぜないでください" * - それについて何が間違っていますか?それは許される。あなたの方法は間違っています。解決策はこれよりも簡単です。 –

1

ループ内で複数のクエリを実行する理由はありません。ただ2つのクエリを結合するだけです。

$stmt = $dbc->prepare(" 
    SELECT t1.verbNum, t2.mainVerb 
    FROM verblist AS t1 
    JOIN verblist AS t2 ON t1.verbNum = t2.verbNum 
    WHERE t1.mainVerb = ? 
    ORDER BY t1.verbNum") 
$stmt->bind_param("s", $selectedVerb); 
$stmt->execute(); 
$stmt->bind_result($verbNum, $mainVerb); 
$firstRow = true; 
while ($stmt->fetch()) { 
    if ($firstRow) { 
     echo '<span>'.$selectedVerb.' is part of verb number: '.$verbNum. '</span>'; 
     $firstRow = false; 
    } 
    echo $mainVerb . "<br>"; 
} 
関連する問題