php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #65397 Mysql_* functions hide their warning
Submitted: 2013-08-06 04:50 UTC Modified: 2013-08-20 19:19 UTC
Votes:1
Avg. Score:3.0 ± 0.0
Reproduced:1 of 1 (100.0%)
Same Version:1 (100.0%)
Same OS:1 (100.0%)
From: info at markoheijnen dot com Assigned:
Status: Not a bug Package: MySQL related
PHP Version: 5.5.1 OS: Debian Wheezy
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: info at markoheijnen dot com
New email:
PHP Version: OS:

 

 [2013-08-06 04:50 UTC] info at markoheijnen dot com
Description:
------------
When I run mysql_query() in PHP 5.4 without having a valid connection I will get 
the warning about not having a valid connection and access to the user has been 
denied. But when I now call mysql_query() in PHP 5.5 I only get the deprecation 
message. I would expect to also see the warnings.

I only tested this with mysql_query() but I guess it will infect other functions 
that can throw warnings.

Test script:
---------------
<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');
mysql_query('SELECT * FROM table');

Expected result:
----------------
Deprecated: mysql_query(): The mysql extension is deprecated and will be removed 
in the future: use mysqli or PDO instead in test.php on line 4

Warning: mysql_query(): Access denied for user 'www-data'@'localhost' (using 
password: NO) in test.php on line 4

Warning: mysql_query(): A link to the server could not be established in test.php 
on line 4

Actual result:
--------------
Deprecated: mysql_query(): The mysql extension is deprecated and will be removed 
in the future: use mysqli or PDO instead in test.php on line 4

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2013-08-20 01:06 UTC] william dot a dot bartlett at gmail dot com
Not a bug.

mysql_query() is throws a deprecation error, not a deprecation warning.

Try:
---
<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');
mysql_query('SELECT 1');
echo 'mysql_query() returns a warning, not an error';
 [2013-08-20 01:43 UTC] requinix@php.net
-Status: Open +Status: Feedback
 [2013-08-20 01:43 UTC] requinix@php.net
It is just a warning. A "notice", even. Not fatal.

@info: It's a silly question but are you sure it didn't connect? What's the output of

<?php
error_reporting(-1);
ini_set("display_errors", true);
// replace the query below with one that should actually work
var_dump(mysql_num_rows(mysql_query("SELECT * FROM table LIMIT 1")));
echo "still executing";
?>
 [2013-08-20 01:48 UTC] william dot a dot bartlett at gmail dot com
> It is just a warning. A "notice", even. Not fatal.

No.  As per: http://www.php.net/manual/en/changelog.mysql.php

In PHP5.5, mysql_* functions emit E_DEPRECATED error, not E_DEPRECATED warning. It IS fatal.

My example was intended to indicate that the echo statement nevers occurs (which is the expected behavior).
 [2013-08-20 01:53 UTC] william dot a dot bartlett at gmail dot com
I mispoke slightly.  As per: http://www.php.net/manual/en/function.mysql-query.php

> If the link identifier is not specified, the last link opened by mysql_connect() is assumed. If no such link is found, it will try to create one as if mysql_connect() was called with no arguments. If no connection is found or established, an E_WARNING level error is generated.

when you call mysql_query, it will call mysql_connect().  mysql_connect() returns a fatal error, E_DEPRECATED. The E_WARNING is never generated because execution crashes before mysql_query is called.  At the most, a documentation error.

For goodness sakes, there is no allowable way to call mysql_query() in php5.5 because there are no valid mysql connections.
 [2013-08-20 03:08 UTC] requinix@php.net
It isn't fatal in the 5.5.1 I'm executing.

E:\programs\PHP\php-5.5.1-Win32-VC11-x86>php -v
PHP 5.5.1 (cli) (built: Jul 18 2013 10:56:37)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2013 Zend Technologies

E:\programs\PHP\php-5.5.1-Win32-VC11-x86>php -d extension=ext/php_mysql.dll
<?php
error_reporting(-1);
ini_set("display_errors", true);
// replace the query below with one that should actually work
var_dump(mysql_num_rows(mysql_query("SELECT * FROM table LIMIT 1")));
echo "still executing";
?>
^Z

Deprecated: mysql_query(): The mysql extension is deprecated and will be removed 
in the future: use mysqli or PDO instead in - on line 5

Warning: mysql_query(): No connection could be made because the target machine 
actively refused it.
 in - on line 5

Warning: mysql_query(): A link to the server could not be established in - on 
line 5

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in - 
on line 5
NULL
still executing
E:\programs\PHP\php-5.5.1-Win32-VC11-x86>

Meanwhile at the top of php_mysql.c/php_mysql_do_connect in the source,
https://github.com/php/php-src/blob/master/ext/mysql/php_mysql.c#L734

    php_error_docref(NULL TSRMLS_CC,
                     E_DEPRECATED,
                     "The mysql extension is deprecated and will be removed in 
the future: use mysqli or PDO instead");

(after which it continues on its merry way) and E_DEPRECATED is most certainly 
not fatal.
 [2013-08-20 17:55 UTC] info at markoheijnen dot com
It was a mistake in my MySQL user data. Not sure how it get there but because it 
could connect to the database without username/password. What is the default 
values in php.ini
 [2013-08-20 19:19 UTC] requinix@php.net
-Status: Feedback +Status: Not a bug
 [2013-08-20 19:19 UTC] requinix@php.net
The default values
  http://www.php.net/manual/en/mysql.configuration.php
are all empty, but I believe on Windows the default username is "ODBC".
 [2014-07-15 02:10 UTC] youtea at wit dot edu
hello
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Fri Dec 13 03:01:28 2024 UTC