php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #54644 wrong pathes in php_pdo_mysql_int.h
Submitted: 2011-05-01 14:15 UTC Modified: 2011-05-09 13:35 UTC
From: public at grik dot net Assigned: mysql (profile)
Status: Closed Package: PDO related
PHP Version: 5.3.6 OS: unix
Private report: No CVE-ID: None
 [2011-05-01 14:15 UTC] public at grik dot net
Description:
------------
in ext/pdo_mysql/php_pdo_mysql_int.h you have
#if defined(PDO_USE_MYSQLND)
# include "ext/mysqlnd/mysqlnd.h"
# include "ext/mysql/mysql_mysqlnd.h"
# include "ext/mysqlnd/mysqlnd_libmysql_compat.h"
...
#if defined(PDO_USE_MYSQLND)
#include "ext/mysqlnd/mysqlnd_debug.h"


so when I tried to re-compile the pdo_mysql extension from the extension folder 
using `phpize;configure--with-pdo-mysql=mysqlnd;make`, it barkled that can't find 
"ext/mysqlnd/mysqlnd.h"
I changed to #include "../../ext/mysqlnd/mysqlnd_debug.h"
and compiled the extension, but that's obviously not a solution.

Test script:
---------------
none

Expected result:
----------------
Build complete.
Don't forget to run 'make test'.


Actual result:
--------------
In file included from /usr/src/web/php-5.3.6/ext/pdo_mysql/pdo_mysql.c:32:
/usr/src/web/php-5.3.6/ext/pdo_mysql/php_pdo_mysql_int.h:28:38: error: 
ext/mysql/mysql_mysqlnd.h: No such file or directory


Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2011-05-02 11:41 UTC] johannes@php.net
-Status: Open +Status: Feedback -Assigned To: +Assigned To: mysql
 [2011-05-02 11:41 UTC] johannes@php.net
How did you compile and install PHP? Are you sure you have a clean installation and not a mixture of different PHPs? It works for me properly. Also: what kind of Unix are you using?
 [2011-05-02 13:26 UTC] public at grik dot net
-Status: Feedback +Status: Assigned
 [2011-05-02 13:26 UTC] public at grik dot net
yes, I am sure, I download PHP archive from this site and compile it manually 
always;

It does not matter how I compile. Just open php-
5.3.6/ext/pdo_mysql/php_pdo_mysql_int.h
and look at lines 27-29

You can compile only from the root folder of the archive, but if you want to 
build the extension separately with phpize, you need to edit the source.
 [2011-05-02 13:32 UTC] johannes@php.net
-Status: Assigned +Status: Feedback
 [2011-05-02 13:32 UTC] johannes@php.net
To compile the extension stand-alone you need an installed PHP. I was asking about that.
 [2011-05-02 13:40 UTC] public at grik dot net
-Status: Feedback +Status: Assigned
 [2011-05-02 13:40 UTC] public at grik dot net
yes, I have it installed. It was a re-compilation of an extension due to another 
error: http://bugs.php.net/bug.php?id=54646

I understand you are busy and abused by reports, but this is not that case.
I managed to recompile it after patching the header file.

Please re-read the description.
 [2011-05-02 14:43 UTC] johannes@php.net
-Status: Assigned +Status: Feedback
 [2011-05-02 14:43 UTC] johannes@php.net
The mysqlnd.h file inside the distribution is *not* the file you are looking for. You are looking for a file installed on your system. The installation where "phpize" is coming from.
 [2011-05-02 19:11 UTC] public at grik dot net
-Status: Feedback +Status: Assigned
 [2011-05-02 19:11 UTC] public at grik dot net
Look:

# tar -xjf php-5.3.6.tar.bz2
mysqli]# cd php-5.3.6/ext/mysqli/
mysqli]# phpize; ./configure --with-mysqli=mysqlnd; make
...
Build complete.
Don't forget to run 'make test'.
mysqli]# cd ../pdo_mysql/
pdo_mysql]# phpize;./configure --with-pdo-mysql=mysqlnd;make
...
In file included from /usr/src/web/php-5.3.6/ext/pdo_mysql/pdo_mysql.c:32:
/usr/src/web/php-5.3.6/ext/pdo_mysql/php_pdo_mysql_int.h:28:38: error: 
ext/mysql/mysql_mysqlnd.h: No such file or directory
make: *** [pdo_mysql.lo] Error 1

# php -v
PHP 5.3.6 (cli) (built: Apr 30 2011 21:21:49) (DEBUG)
Copyright (c) 1997-2011 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2011 Zend Technologies

pdo_mysql]# cd ../..
php-5.3.6]# ./configure --with-pdo-mysql=mysqlnd;make

Build complete.
Don't forget to run 'make test'.



What else can I show you?
 [2011-05-02 20:19 UTC] public at grik dot net
There is one phpize in the system, and I reinstalled PHP to ensure the error 
persists.
mysqlnd.h exists and is present in the proper folder

[root@devel php-5.3.6]# whereis phpize
phpize: /usr/local/bin/phpize

[root@devel php-5.3.6]# phpize -v
Configuring for:
PHP Api Version: 20090626
Zend Module Api No: 20090626
Zend Extension Api No: 220090626

[root@devel php-5.3.6]# locate mysqlnd.h
/usr/local/include/php/ext/mysqlnd/mysqlnd.h
/usr/local/include/php/ext/mysqlnd/php_mysqlnd.h
/usr/src/web/php-5.3.6/ext/mysql/mysql_mysqlnd.h
/usr/src/web/php-5.3.6/ext/mysqli/mysqli_mysqlnd.h
/usr/src/web/php-5.3.6/ext/mysqlnd/mysqlnd.h
/usr/src/web/php-5.3.6/ext/mysqlnd/php_mysqlnd.h

[root@devel php-5.3.6]# ll /usr/local/include/php/ext/mysqlnd/mysqlnd.h
-rw-r--r-- 1 root root 17088 2011-05-02 20:49 
/usr/local/include/php/ext/mysqlnd/mysqlnd.h

[root@devel php-5.3.6]# php-config --includes
-I/usr/local/include/php -I/usr/local/include/php/main -
I/usr/local/include/php/TSRM -I/usr/local/include/php/Zend -
I/usr/local/include/php/ext -I/usr/local/include/php/ext/date/lib
 [2011-05-02 21:12 UTC] tony2001@php.net
The problem is quite weird. 
I guess this line:
#      include "ext/mysql/mysql_mysqlnd.h"
..is some kind of leftover from the good ol' times when mysqlnd was a part of ext/mysql/; at least nothing breaks if I remove it.

So the patch is as easy as this:
--- php_pdo_mysql_int.h (revision 307861)
+++ php_pdo_mysql_int.h (working copy)
@@ -25,7 +25,6 @@

 #if defined(PDO_USE_MYSQLND)
 #      include "ext/mysqlnd/mysqlnd.h"
-#      include "ext/mysql/mysql_mysqlnd.h"
 #      include "ext/mysqlnd/mysqlnd_libmysql_compat.h"
 #      define PDO_MYSQL_PARAM_BIND MYSQLND_PARAM_BIND
 #else
 [2011-05-02 21:20 UTC] tony2001@php.net
There's also another issue: you can't install mysqlnd itself, you have to install one of the extensions using it. So in order to build shared version of PDO_MYSQL with myslnd you have to build ext/mysql with myslnd *statically*.
I believe ext/mysqlND should be full-grown extension with its own --enable-mysqlnd option, this was you could build it separately AND still be able to use your automagic with $PHP_MYSQLND_ENABLED.
 [2011-05-02 22:32 UTC] public at grik dot net
-Status: Assigned +Status: Closed
 [2011-05-02 22:32 UTC] public at grik dot net
thanks!

I am sorry for the wrong initial description, complaining at # include 
"ext/mysqlnd/mysqlnd.h" while the error clearly told about 
"ext/mysql/mysql_mysqlnd.h"
 [2011-05-03 06:56 UTC] tony2001@php.net
-Status: Closed +Status: Assigned
 [2011-05-03 06:56 UTC] tony2001@php.net
I didn't commit the patch yet, I still want to hear from the MySQL guys first.
Also it's their domain, not mine.
 [2011-05-03 09:21 UTC] andrey@php.net
Tony,
you are not exactly right. ext/mysql/mysql_mysqlnd.h is not a left-over. If you take a look into ext/mysqli you will find mysqli_mysqlnd.h, which is larger but follows the same schema - ext_driver (mysqli_libmysql.h exists). However, mysql_myslqnd.h is so small, that it could be incorporated into another file, if wanted.

Best,
Andrey
 [2011-05-04 20:49 UTC] tony2001@php.net
Andrey, whatever that header is, its contents is not used in PDO_MYSQL and the header itself is not installed, which means there's not way to build PDO_MYSQL+mysqlnd dynamically.
 [2011-05-09 13:34 UTC] johannes@php.net
Automatic comment from SVN on behalf of johannes
Revision: http://svn.php.net/viewvc/?view=revision&revision=310850
Log: - Fix bug #54644 (wrong pathes in php_pdo_mysql_int.h)
 [2011-05-09 13:35 UTC] johannes@php.net
-Status: Assigned +Status: Closed
 [2011-05-09 13:35 UTC] johannes@php.net
This bug has been fixed in SVN.

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.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu Nov 21 15:01:30 2024 UTC