php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #35480 Persistent connections + unknown column crashes
Submitted: 2005-11-29 21:10 UTC Modified: 2005-11-30 19:05 UTC
Votes:2
Avg. Score:3.5 ± 0.5
Reproduced:2 of 2 (100.0%)
Same Version:1 (50.0%)
Same OS:0 (0.0%)
From: tim at komta dot com Assigned: wez (profile)
Status: Closed Package: PDO related
PHP Version: 5CVS-2005-11-30 (snap) OS: Windows XP
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: tim at komta dot com
New email:
PHP Version: OS:

 

 [2005-11-29 21:10 UTC] tim at komta dot com
Description:
------------
Using a persistent connection with PDO (mysql tested) and then executing a query with an unknown column will crash PHP 5.1.1, and take Apache with it.

This has been reproduced on two seperate systems here at the office already.  Both systems use Apache 2.0.54 as a module, with PHP 5.1.1

Reproduce code:
---------------
<?php 
$pdo = new PDO('mysql:host=HOST;dbname=mysql',
       USER, PASSWORD, array(PDO::ATTR_PERSISTENT => TRUE));
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
$pdo->query('SELECT frank FROM mysql.user LIMIT 20');
?>

Expected result:
----------------
Expect a warning, such as Warning: PDO::query() [function.query]: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'frank' in 'field list' in C:\Documents and Settings\Tim\workspace\hxpa SVN\temp.php on line 5

Actual result:
--------------
PHP (Apache is reported) crashes.

Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2005-11-29 21:55 UTC] tony2001@php.net
And what MySQL version?
 [2005-11-29 23:04 UTC] tim at komta dot com
Oops, sorry about that, it's MySQL 5.0.15
 [2005-11-29 23:09 UTC] tony2001@php.net
Georg, this seems to be the same issue caused by protocol binary incompatibility.
 [2005-11-30 03:35 UTC] wez@php.net
tim, can you provide a backtrace?
 [2005-11-30 14:07 UTC] sniper@php.net
Please try using this CVS snapshot:

  http://snaps.php.net/php5.1-latest.tar.gz
 
For Windows:
 
  http://snaps.php.net/win32/php5.1-win32-latest.zip


 [2005-11-30 15:26 UTC] tim at komta dot com
With the snapshot linked by Sniper, the problem is still there.

Wez, I think I'm misunderstanding what you're asking...The method of getting a backtrace that I know of (debug_backtrace()) requires PHP to be running.  The script crashes in such a way that no output ever goes to the user agent, in spite of no output buffering.

Is there something else I should be doing?

- Tim
 [2005-11-30 16:07 UTC] andrea at 3site dot it
Hi guys, theese are two result files generated by APD for PHP 5.1.1 ... are theese usefull ?

First crash: 
#Pprof [APD] v1.0.1
caller=C:\Programmi\Apache Group\Apache2\htdocs\test.php

END_HEADER
! 2 C:\Programmi\Apache Group\Apache2\htdocs\test.php
& 3 main 2
+ 3 2 2
& 4 apd_set_pprof_trace 2
+ 4 2 2
@ 2 2 0 10014 7978
- 3
& 6 PDO->__construct 1
+ 6 2 9
@ 2 9 0 0 271419
- 6
& 7 PDO->prepare 1
+ 7 2 14
@ 2 14 0 0 106
- 7
& 8 PDOStatement->execute 1
+ 8 2 15
@ 2 15 0 0 1164
- 8
@ 2 19 0 0 27
- 2


Second crash, script launched 1 time ... but two crashes:
#Pprof [APD] v1.0.1
caller=C:\Programmi\Apache Group\Apache2\htdocs\test.php

END_HEADER
! 1 C:\Programmi\Apache Group\Apache2\htdocs\test.php
& 1 main 2
+ 1 1 2
& 2 apd_set_pprof_trace 2
+ 2 1 2
@ 0 2 0 10014 3020
- 2
& 4 PDO->__construct 1
+ 4 1 9
@ 1 9 0 0 7835
- 4
& 5 PDO->prepare 1
+ 5 1 14
@ 1 14 0 0 77
- 5
& 6 PDOStatement->execute 1
+ 6 1 15
@ 1 15 0 0 435
- 6
@ 1 19 0 0 22
- 1



Code used is the same of gm with apd starded:
<?php
apd_set_pprof_trace();
try {
    $dbo = new PDO(
                        'mysql:host=localhost;dbname=test',
                        'user',
                        'pass',
                        array(PDO::ATTR_PERSISTENT => true)
                    );
} catch(PDOException $e) {
    echo 'Errore di connessione: '.$e->getMessage();
}

$pdostatement = $dbo->prepare('SELECT * FROM fake_table');
$pdostatement->execute();

echo 'print something';

?>


Regards .

P.S. Windows XP SP2 full updated with Apache 2.0.52 and PHP 5.1.1 as module
 [2005-11-30 16:37 UTC] andrea at 3site dot it
Hi guys, it's me again :-)

MySQL used version for over debug was MySQL 4.1.9-nt ... but maybe the problem is for the constant PDO::ATTR_PERSISTENT that creates some problems on windows and Apache ... 

in sqlite, 2 or 3 default version, is the same .. in a different way, if I try to connect with PDO::ATTR_PERSISTENT => true the database will be undeletable and I need to stop Apache (with a crash) ... and then I can delete my files.

It doesn't happen without PDO::ATTR_PERSISTENT during connection ... but I wonder in a :memory: connection what should happen ... fear !!!!! :oVVoVe:

Now this is the code:
<?php
$dbfile1 = 'sqlite2.sql';
$dbfile2 = 'sqlite3.sql';
$sqlite = new PDO('sqlite2:'.$dbfile1, '', '', array(PDO::ATTR_PERSISTENT => true));
unset($sqlite);
$sqlite = new PDO('sqlite:'.$dbfile2, '', '', array(PDO::ATTR_PERSISTENT => true));
unset($sqlite);
unlink($dbfile1);
unlink($dbfile2);
?>

Regards
 [2005-11-30 18:52 UTC] wez@php.net
Please try using this CVS snapshot:

  http://snaps.php.net/php5.1-latest.tar.gz
 
For Windows:
 
  http://snaps.php.net/win32/php5.1-win32-latest.zip

I meant a gdb backtrace for the crash.
However, I think this problem has now been resolved; please try the next 5.1 snapshot dated after this report.
 [2005-11-30 19:01 UTC] tim at komta dot com
Yup, that seems to have fixed it, at least for MySQL.

Thanks!

Tim
 [2005-11-30 19:05 UTC] iliaa@php.net
This bug has been fixed in CVS.

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-2022 The PHP Group
All rights reserved.
Last updated: Thu Jan 20 21:03:36 2022 UTC