Hi James, The manual page for mysqli_stmt::execute has the following note : When using mysqli_stmt_execute(), the mysqli_stmt_fetch() function must be used to fetch the data prior to performing any additional queries. So you cannot execute the inner (sub) query without first retrieving all the rows from the outer (main) query. Olivier Desmares $stmt = mysqli_prepare($db, $sql); mysqli_stmt_execute($stmt); mysqli_stmt_bind_result($stmt, $authkv); while (mysqli_stmt_fetch($stmt)) { echo "<p>MAIN: $authkv</p>"; sub($db); } mysqli_stmt_close($stmt); This simple change results in the output. MAIN: 7 Warning: mysqli_stmt_execute() expects parameter 1 to be mysqli_stmt, boolean given in /var/www/html/xgwebapi/mysqli.php on line 21 Warning: mysqli_stmt_bind_result() expects parameter 1 to be mysqli_stmt, boolean given in /var/www/html/xgwebapi/mysqli.php on line 22 Warning: mysqli_stmt_fetch() expects parameter 1 to be mysqli_stmt, boolean given in /var/www/html/xgwebapi/mysqli.php on line 24 Warning: mysqli_stmt_close() expects parameter 1 to be mysqli_stmt, boolean given in /var/www/html/xgwebapi/mysqli.php on line 28