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
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: public at grik dot net
New email:
PHP Version: OS:

 

 [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