php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #49436 during query executed, mysql connection lost
Submitted: 2009-09-02 04:37 UTC Modified: 2009-09-09 19:48 UTC
From: november at netsecuretech dot com Assigned:
Status: Not a bug Package: MySQLi related
PHP Version: 5.3.0 OS: windowsXP
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: november at netsecuretech dot com
New email:
PHP Version: OS:

 

 [2009-09-02 04:37 UTC] november at netsecuretech dot com
Description:
------------
PHP version : 5.3.0 Windows Binary VC9 x86 Thread Safe (2009-Jun-30 08:52:56)

Mysql version : 5.1.37-community-edition (CentOS 4.7)

I use php CLI SAPI.

PHP cli's default max_execution_time is unlimited.

When I execute php script, mysql connection is lost.

When I use php 5.2.10, mysql query executed well.

What Can I do?

Thank you.

Reproduce code:
---------------
<?php

$db = mysqli_connect('x.x.x.x', 'id', 'pw', 'db');

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

echo date("Y-m-d H:i:s")." => query start...\r\n";

$query = "create table test as select c_ip, count(*) from iis_summary group by c_ip";

mysqli_query($db, $query); 

if (mysqli_errno($db) != 0) {
	echo mysqli_errno($db)." ".mysqli_error($db)."\r\n";
}

echo date("Y-m-d H:i:s")." => query end...\r\n";

mysqli_close($db);

?>

Expected result:
----------------
During query, mysql connection lost.

PHP Warning:  mysqli_query(): MySQL server has gone away in C:\php\Script\mysqli
_test.php on line 14


Actual result:
--------------
C:\php\Script>..\php.exe mysqli_test.php
2009-09-02 13:23:15 => query start...
PHP Warning:  mysqli_query(): MySQL server has gone away in C:\php\Script\mysqli
_test.php on line 14
PHP Warning:  mysqli_query(): Error reading result set's header in C:\php\Script
\mysqli_test.php on line 14
2006 MySQL server has gone away
2009-09-02 13:24:15 => query end...

C:\php\Script>

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2009-09-02 04:40 UTC] november at netsecuretech dot com
mysql query takes 20~30 minutes;

$query = "create table test as select c_ip, count(*) from iis_summary
group by c_ip";

thank you
 [2009-09-02 09:41 UTC] jani@php.net
Please try using this snapshot:

  http://snaps.php.net/php5.3-latest.tar.gz
 
For Windows:

  http://windows.php.net/snapshots/


 [2009-09-02 10:07 UTC] november at netsecuretech dot com
I installed VC9 x86 Thread Safe (2009-Sep-02 11:00:00) verion.

It is not work well.

result is below...

thank you.

--------------------------------------------
C:\php\Script>..\php.exe mysqli_test.php
2009-09-02 19:03:27 => query start...
2006 MySQL server has gone away
2009-09-02 19:04:27 => query end...

C:\php\Script>
 [2009-09-03 12:38 UTC] jani@php.net
Did you check the mysql server error log if it has any clues what happened?
 [2009-09-04 01:17 UTC] november at netsecuretech dot com
I think this problem isn't related to mysql error.

I modifyed php.ini.
Before : default_socket_timeout = 0
After : default_socket_timeout = -1

I execute php script.

Php script was processed successed.

Default_socket_timeout influence mysqli connection?

I tested below script.

If default_socket_timeout is -1, script isn't ended.

I think mysqli connection timeout and socket timeout managed separated.

thank you.

<?php

echo 'PHP ' . phpversion() . "\n\n";

echo date('H:i:s ')."Start script\n";

ini_set('default_socket_timeout', 60);

echo 'max_execution_time: ' . ini_get('max_execution_time') . "\n";
echo 'default_socket_timeout: ' . ini_get('default_socket_timeout') .
"\n";

$mysqli = new mysqli('localhost', 'does', 'not', 'matter', 1);
if ($mysqli->connect_error) {
    echo "GOOD CATCH\n";
}

echo date('H:i:s ')."End script\n\n";


echo date('H:i:s ')."Start script\n";

ini_set('default_socket_timeout', -1);

echo 'max_execution_time: ' . ini_get('max_execution_time') . "\n";
echo 'default_socket_timeout: ' . ini_get('default_socket_timeout') .
"\n";

$mysqli = new mysqli('localhost', 'does', 'not', 'matter', 1);
if ($mysqli->connect_error) {
    echo "GOOD CATCH\n";
}

echo date('H:i:s ')."End script\n\n";

?>
 [2009-09-09 19:48 UTC] jani@php.net
See also bug #49511 (it also has good analysis of the issue, closing 
this in favor of that)
 
PHP Copyright © 2001-2025 The PHP Group
All rights reserved.
Last updated: Mon Jan 06 11:01:31 2025 UTC