#45763 [Csd]: mysqli::multi_query does not work with mysqlnd

From: Date: Mon, 11 Aug 2008 18:06:21 +0000
Subject: #45763 [Csd]: mysqli::multi_query does not work with mysqlnd
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-127897@lists.php.net to get a copy of this message
 ID:               45763
 User updated by:  michael dot kofler at gmx dot com
 Reported By:      michael dot kofler at gmx dot com
 Status:           Closed
 Bug Type:         MySQLi related
 Operating System: linux
 PHP Version:      5.3.0alpha1
 Assigned To:      johannes
 New Comment:

mysqli: works fine now, thanks!

PDO: sorry for the false alarm, another query executed before was the
cause


Previous Comments:
------------------------------------------------------------------------

[2008-08-11 12:45:27] johannes@php.net

This bug has been fixed in CVS.

Snapshots of the sources are packaged every three hours; this change
will be in the next snapshot. You can grab the snapshot at
http://snaps.php.net/.
 
Thank you for the report, and for helping us make PHP better.

The MySQLi case is fixed, the PDO case works for me with emulated
prepared statements. Multi Query isn't supported by MySQL when using
native prepared statements.

------------------------------------------------------------------------

[2008-08-11 08:44:16] uw@php.net

(some debug output from my hacked php5.3 included)

nixnutz@ulflinux:~/src/php5> sapi/cli/php -i | grep configure
Configure Command =>  './configure' 
'--with-mysqli=/usr/local/mysql/bin/mysql_config'
'--with-pdo-mysql=/usr/local/mysql/bin/mysql_config'

nixnutz@ulflinux:~/src/php5> sapi/cli/php -r '$p = new
PDO("mysql:host=localhost;db=test", "root", "root"); $stmt =
$p->query("SELECT 1; SELECT 2; SELECT 3"); do {
var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); } while
($stmt->nextRowset());'
fetch_value(0)
param_str
array(1) {
  [0]=>
  array(1) {
    [1]=>
    string(1) "1"
  }
}
fetch_value(0)
param_str
array(1) {
  [0]=>
  array(1) {
    [2]=>
    string(1) "2"
  }
}
fetch_value(0)
param_str
array(1) {
  [0]=>
  array(1) {
    [3]=>
    string(1) "3"
  }
}



nixnutz@ulflinux:~/src/php5> sapi/cli/php -i | grep configure
Configure Command =>  './configure'  '--with-mysqli=mysqlnd'
'--with-pdo-mysql=mysqlnd'

nixnutz@ulflinux:~/src/php5> sapi/cli/php -r '$p = new
PDO("mysql:host=localhost;db=test", "root", "root"); $stmt =
$p->query("SELECT 1; SELECT 2; SELECT 3"); do {
var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); } while
($stmt->nextRowset());'
fetch_value(0)
param_str
array(1) {
  [0]=>
  array(1) {
    [1]=>
    string(1) "1"
  }
}
fetch_value(0)
param_str
array(1) {
  [0]=>
  array(1) {
    [2]=>
    string(1) "2"
  }
}
fetch_value(0)
param_str
array(1) {
  [0]=>
  array(1) {
    [3]=>
    string(1) "3"
  }
}

------------------------------------------------------------------------

[2008-08-11 07:56:21] michael dot kofler at gmx dot com

also does not work with PDO:

  $sql = "SELECT 1; SELECT 2; SELECT  3";
  $result = $conn->query($sql);
  do {
    echo "<p>----\n";
    $rowset = $result->fetch(PDO::FETCH_NUM);
    foreach($rowset as $row) {
      echo "<p>$row[0]";
   }
  } while($result->nextRowset());

Expected result (which I get with libmysql)

----
1
----
2
----
3

Actual result (with myslqnd, apparently only the first SQL command is
evaluated)

----
1

------------------------------------------------------------------------

[2008-08-09 07:52:08] uw@php.net

Hmm, I'm wrong its more tricky. 

More like - first execution fails, second and all after work fine. It
does not matter if you use the procedural or OO interface. 

The test does not catch it because it first does parameter tests (e.g.
mysqli_multi_query($link, "") - expected to fail) before it runs a
query. And "runs a query" is the second function call.

But anyway Johannes, if its not in the inner workings of mysqlnd
itself, try to shield Andrey from PHP works.

Ulf

------------------------------------------------------------------------

[2008-08-09 07:34:53] uw@php.net

Works with the procedural interface, use procedural style until fix has
been committed.

Re-assigning to Johannes. Andrey is busy with non-PHP work at the
moment. Johannes please have a look

------------------------------------------------------------------------

The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
    http://bugs.php.net/45763

-- 
Edit this bug report at http://bugs.php.net/?id=45763&edit=1



Thread (8 messages)

« previous php.bugs (#127897) next »