php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #72856 incompatible use of odbc and mysql, if connecting with odbc to localhost
Submitted: 2016-08-16 15:36 UTC Modified: -
Votes:1
Avg. Score:5.0 ± 0.0
Reproduced:1 of 1 (100.0%)
Same Version:0 (0.0%)
Same OS:1 (100.0%)
From: bugphp at wirelessmundi dot com Assigned:
Status: Open Package: CGI/CLI related
PHP Version: 5.6.24 OS: debian 8
Private report: No CVE-ID: None
View Add Comment Developer Edit
Welcome! If you don't have a Git account, you can't do anything here.
You can add a comment by following this link or if you reported this bug, you can edit this bug over here.
(description)
Block user comment
Status: Assign to:
Package:
Bug Type:
Summary:
From: bugphp at wirelessmundi dot com
New email:
PHP Version: OS:

 

 [2016-08-16 15:36 UTC] bugphp at wirelessmundi dot com
Description:
------------
at some random calls i can't connect to mysql and no error is report back. 
this issue is present with nginx + php-fpm + mysql with multiple sites running on the same server.

After digging, i found that this error is cause by a odbc call from one of the sites. when the odbc call is done one some php-fpm child and other site tries to connect using mysqli_connect on this same php-fpm child it simple fails and no error is thrown. the return link is false.

if its relevant, the odbc connection is configure over unixodbc directly to /var/run/mysqld/mysqld.sock.

i could reproduce the error using simple php script with cli, attached the script to reproduce it.  


I've try to connect to 127.0.0.1 instead of the socket, but i got the same results.




Test script:
---------------
<?php
// when connecting to odbc will make fail all the mysql connections
using_odbc();
sleep(5);
using_mysqli_obj();
using_mysqli();

function using_mysqli()
{
	echo "*** MySQLi \n";
	$link = mysqli_connect("localhost", "root", "m1sq7passwd", "tel_app", "3306", "/var/run/mysqld/mysqld.sock");
	if (!$link) { echo "Error connecting to MYSQL [".mysqli_connect_errno()."] ".mysqli_connect_error()."\n"; }
	else {
		$result = @mysqli_query($link, "select count(*) as total from client_limit;");
		if (!is_object($result)) {
			echo "no results found, error: ".mysqli_error($link)."\n";
		}
		else {
			$tmp = mysqli_fetch_array($result, MYSQLI_ASSOC);
			mysqli_free_result($result);
			print_r($tmp);
		}
		if (!mysqli_close($link)) {
			echo "Fail to disconnect db link \n";
		}
		unset($link);
	}
	echo "***\n";
}
function using_mysqli_obj() 
{
	echo "*** MySQLi OBJ\n";
	$mysqli = new mysqli('localhost', 'root', 'm1sq7passwd', 'tel_app');
	if ($mysqli->connect_error) { echo ('Connect Error (' . $mysqli->connect_errno . ') '.$mysqli->connect_error); }
	else {
		$result = $mysqli->query("select count(*) as total from client_limit;", MYSQLI_USE_RESULT);
		if (!is_object($result)) {
			echo "no results found, error: ".$mysqli->error."\n";
		}
		else {
			$tmp = $result->fetch_object();
			print_r($tmp);
			$result->close();
		}
		$mysqli->close();
	}
	echo "*** \n ";
}
function using_odbc()
{
	echo "*** ODBC \n";
	$conn = odbc_connect("localhost_tel_cdr", false, false);
	if (!$conn) { echo "fail to connect using odbc ".odbc_errormsg(); }
	else {
		$res = odbc_exec($conn, "select count(*) as total_cdr from cdr where (start_stamp >= '1470751734' ) and (start_stamp <= '1471356534' );");
		if (!$res) {
			echo "Fail to execute sql ".odbc_errormsg();
		}
		else {
			$row = odbc_fetch_array($res);
			print_r($row);
			odbc_free_result($res);
		}
		odbc_close($conn);
	}
	echo "***";
}

?>

Expected result:
----------------
*** ODBC 
Array
(
    [total_cdr] => 98
)
*** MySQLi OBJ
stdClass Object
(
    [total] => 216
)
*** 
 *** MySQLi 
Array
(
    [total] => 216
)
***

Actual result:
--------------
*** ODBC 
Array
(
    [total_cdr] => 98
)
****** MySQLi OBJ

Warning: mysqli::query(): Couldn't fetch mysqli in /root/mysql_phpbug.php on line 47

Warning: using_mysqli_obj(): Couldn't fetch mysqli in /root/mysql_phpbug.php on line 49
no results found, error: 

Warning: mysqli::close(): Couldn't fetch mysqli in /root/mysql_phpbug.php on line 56
*** 
 *** MySQLi 
Error connecting to MYSQL [0] 
***

Patches

Add a Patch

Pull Requests

Add a Pull Request

 
PHP Copyright © 2001-2019 The PHP Group
All rights reserved.
Last updated: Sun Oct 20 09:01:26 2019 UTC