#37732 [Opn->Bgs]: calling mysqli_multi_query with multiple queries stops subsequent queries
| From: | georg@php.net | Date: | Thu, 08 Jun 2006 09:40:44 +0000 |
| Subject: | #37732 [Opn->Bgs]: calling mysqli_multi_query with multiple queries stops subsequent queries | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-98167@lists.php.net to get a copy of this message | ||
ID: 37732
Updated by: georg@php.net
Reported By: jerry dot walsh at gmail dot com
-Status: Open
+Status: Bogus
Bug Type: MySQLi related
Operating System: FreeBSD 6.1-STABLE
PHP Version: 5.1.4
New Comment:
Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to
report
a bug at http://bugs.php.net/how-to-report.php
when using mysqli_multi_query you always have to process the resultsets
before sending a new statement to the server. Even if there is NO
resultset (for non SELECT/SHOW/DESRIBE statements) you have to do that
to obtain errorcodes for the single statements.
Previous Comments:
------------------------------------------------------------------------
[2006-06-07 16:18:55] jerry dot walsh at gmail dot com
This will create the table structure:
DROP TABLE IF EXISTS
billingrecurringinvoice;
CREATE TABLE billingrecurringinvoice (
billingrecurringinvoice_id int(10) unsigned NOT NULL
auto_increment,
billingrecurringinvoice_currencyid int(10) unsigned NOT NULL,
billingrecurringinvoice_status enum('ACTIVE','PENDING_APPROVAL')
NOT NULL,
billingrecurringinvoice_timestamp timestamp NOT NULL default
CURRENT_TIMESTAMP,
PRIMARY KEY (billingrecurringinvoice_id)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS billingrecurringinvoicedetail;
CREATE TABLE billingrecurringinvoicedetail (
billingrecurringinvoicedetail_id int(10) unsigned NOT NULL
auto_increment,
billingrecurringinvoicedetail_billingrecurringinvoiceid int(10)
unsigned default NULL,
billingrecurringinvoicedetail_productid int(10) unsigned default
NULL,
billingrecurringinvoicedetail_quantity int(10) unsigned NOT NULL,
billingrecurringinvoicedetail_dontrecur tinyint(3) unsigned NOT
NULL default '0',
billingrecurringinvoicedetail_description char(255) default NULL,
billingrecurringinvoicedetail_price float default NULL,
PRIMARY KEY (billingrecurringinvoicedetail_id),
KEY IX_productfilesearch
(billingrecurringinvoicedetail_billingrecurringinvoiceid,billingrecurringinvoicedetail_productid)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
------------------------------------------------------------------------
[2006-06-07 16:13:38] jerry dot walsh at gmail dot com
Description:
------------
Calling mysqli_multi_query with multiple insert queries causes
subsequent calls to mysqli_query or mysqli_multi_query to fail with a
MySQL lost connection to server (err#2031).
OS - FreeBSD 6.1
MySQL - 5.0.22 (also tested on 5.0.18)
PHP - 5.1.4
MySQLi version - 5.1.4
Reproduce code:
---------------
$strTestDatabaseName = "Testdb";
$db_hostname = "localhost";
$db_username = "username";
$db_password = "password";
$m_mysqlTestConn = mysqli_connect($db_hostname, $db_username,
$db_password, $strTestDatabaseName);
// succeeds...
$strSQL="INSERT INTO billingrecurringinvoicedetail
(billingrecurringinvoicedetail_quantity,
billingrecurringinvoicedetail_dontrecur)
VALUES (1,false);INSERT INTO billingrecurringinvoicedetail
(billingrecurringinvoicedetail_quantity,
billingrecurringinvoicedetail_dontrecur)
VALUES (1,false);";
mysqli_multi_query($m_mysqlTestConn, $strSQL) ||
print ("Database insert Failed:<br>".mysqli_error($m_mysqlTestConn)."
Code:".mysqli_errno ($m_mysqlTestConn));
$strSQL="SELECT * FROM billingrecurringinvoice WHERE
billingrecurringinvoice_id = 429;";
// fails
(mysqli_multi_query($m_mysqlTestConn, $strSQL)) ||
print ("Database select Failed:<br>".mysqli_error($m_mysqlTestConn)."
Code:".mysqli_errno ($m_mysqlTestConn));
$mysql_result = mysqli_store_result($m_mysqlTestConn);
mysqli_close($m_mysqlTestConn);
Expected result:
----------------
I expected the select to work after the double insert
Actual result:
--------------
This line fails:
$strSQL="SELECT * FROM billingrecurringinvoice WHERE
billingrecurringinvoice_id = 429;";
// fails
(mysqli_multi_query($m_mysqlTestConn, $strSQL)) ||
print ("Database select Failed:<br>".mysqli_error($m_mysqlTestConn)."
With:
Database select Failed:
Lost connection to MySQL server during query Code:2013
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=37732&edit=1