Hi,
 
I am trying to slowly convert some old MySQL based code to the newer MySQLi 
extension and have come across something that I want to call a bug, but thought 
maybe as a newb with the extension that this might be something at least a few 
of you are familiar with.  Basically depending on where I call a function from 
I either get errors but there does not seem to be much rhyme or reason too it.  
Here is a very simple code sample -- yes its procedural ...
 
<?php

$dbuser = "auser";
$dbpass = "apass";
$dbname = "mydb";
$dbhost = "localhost";
$dbport = 3306;

$db = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname, $dbport);

if (mysqli_connect_error()) {
 die('Connect Error (' . mysqli_connect_errno() . ') ' . 
mysqli_connect_error());
}

function sub($db) {
 
 $authkey = '';

 $sql = "select kv from obj order by kv limit 5";
 $stmt = mysqli_prepare($db, $sql);
 mysqli_stmt_execute($stmt);
 mysqli_stmt_bind_result($stmt, $authkv);

 while (mysqli_stmt_fetch($stmt)) {
 echo "<p>&nbsp;SUB: $authkv</p>";
 }
 
 mysqli_stmt_close($stmt);
}

function main($db) {

 $authkey = '';

 $sql = "select kv from obj order by kv limit 5";
 $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);
}

main($db);

?>
 
I get the output I expect:
 
MAIN: 7
MAIN: 8
MAIN: 9
MAIN: 10
MAIN: 11
SUB: 7
SUB: 8
SUB: 9
SUB: 10
SUB: 11
 
This works perfectly however when I call sub from within the while loop in the 
function main this break down. Here is the modification to main:
 
function main($db) {
 
 $authkey = '';
 
 $sql = "select kv from obj order by kv limit 5";
 $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
 
MAIN: 8
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
 
I do not understand why this would be the case -- clearly.  Does anybody have a 
clue for me?  I am using PHP 5.3.3 on CentOS.  And I am very very very stuck.
 
James

Reply via email to