1

The first half of this works correctly. $selectedVerb and $verbNum both come back fine and are displayed. When I try to use $verbNum in the next query, it keeps resulting in error:

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

Code:

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();
}
Alive to die - Anant
  • 70,531
  • 10
  • 51
  • 98
scott.schaffer
  • 645
  • 7
  • 22

2 Answers2

1

Mixing OOP way with procedural way is not a good way to go, so do like below:-

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");

    $stmt->close();

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

    $stmt->bind_param("i", $verbNum);

    $stmt->execute();

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

    $stmt->close();
}
Alive to die - Anant
  • 70,531
  • 10
  • 51
  • 98
1

There's no good reason to do multiple queries in a loop, just join the two queries.

$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>";
}
Barmar
  • 741,623
  • 53
  • 500
  • 612