php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #29215 mysql_file_type returns bogus data
Submitted: 2004-07-16 16:30 UTC Modified: 2004-07-19 23:08 UTC
From: rudy dot metzger at xs4all dot nl Assigned:
Status: Not a bug Package: MySQL related
PHP Version: 5.0.0 OS: Linux RH ES 3
Private report: No CVE-ID: None
 [2004-07-16 16:30 UTC] rudy dot metzger at xs4all dot nl
Description:
------------
mysql_file_type() returns bogus data. 

PHP 5.0.0

mysql> desc zpm_auth;
+----------+-------------+------+-----+---------------------+-------+
| Field    | Type        | Null | Key | Default             | Extra |
+----------+-------------+------+-----+---------------------+-------+
| userid   | varchar(20) |      | PRI |                     |       |
| username | varchar(50) | YES  |     | NULL                |       |
| password | varchar(32) | YES  |     | NULL                |       |
| creusr   | varchar(32) |      |     |                     |       |
| credat   | datetime    |      |     | 0000-00-00 00:00:00 |       |
| modusr   | varchar(32) |      |     |                     |       |
| moddat   | datetime    |      |     | 0000-00-00 00:00:00 |       |
+----------+-------------+------+-----+---------------------+-------+
7 rows in set (0.00 sec)
 
mysql> select version();
+--------------------------+
| version()                |
+--------------------------+
| 4.1.2-alpha-standard-log |
+--------------------------+
1 row in set (0.00 sec)
 
mysql>



  $sql = "SELECT userid FROM zpm_auth LIMIT 1";
  $res = mysql_query( $sql, $this->DBH() );
  $this->EvaluateCommand( $res, false, true, $sql );
                                                                                
  $colType = mysql_field_type( $res, 0 );
die( $colType );


Works in PHP5 RC3


Patches

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2004-07-16 18:35 UTC] georg@php.net
Please use actual mysql version for server and client 
(4.1.3-beta). If you will be able to reproduce the bug, 
send a reproducable and short testscript (including create 
table statement, and insert statement, output of client 
and server version) and reopen this bug. 
 [2004-07-19 15:47 UTC] rudy dot metzger at xs4all dot nl
parlnx03> select version();
+-------------------------+
| version()               |
+-------------------------+
| 4.1.3-beta-standard-log |
+-------------------------+
1 row in set (0.00 sec)
 
parlnx03> show create table test;
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table                           |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| test  | CREATE TABLE `test` (
  `a` varchar(50) default NULL,
  `b` int(11) default NULL,
  `c` datetime default NULL,
  `d` float default NULL,
  `e` text
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
 
parlnx03>


Do not insert any data into the table (in practise, it does not matter if you insert data or not, the result will be the same)

[command] php --version
PHP 5.0.0 (cli) (built: Jul 16 2004 13:57:08)
Copyright (c) 1997-2004 The PHP Group
Zend Engine v2.0.0, Copyright (c) 1998-2004 Zend Technologies

<?php
 
  $dbh = mysql_connect( 'localhost', 'myself', 'mypwd' );
  mysql_select_db( 'test' );
 
  $sql = "SELECT a, b, c, d, e
            FROM test
           LIMIT 1";
  $res = mysql_unbuffered_query( $sql, $dbh );
 
  echo "Following is off by one index!\n";
 
  echo mysql_field_type( $res, 0 )." -> should be A, but is B\n";
  echo mysql_field_type( $res, 1 )." -> should be B, but is C\n";
  echo mysql_field_type( $res, 2 )." -> should be C, but is D\n";
  echo mysql_field_type( $res, 3 )." -> should be D, but is E\n";
  echo mysql_field_type( $res, 4 )." ALWAYS real";
 
  echo " NOTE: A is missing!\n";
 
  mysql_free_result( $res );
 
  mysql_close( $dbh );
 
?>

---------------- SCRIPT OUTPUT --------------------------

[command] php db.php
Following is off by one index!
int -> should be A, but is B
datetime -> should be B, but is C
real -> should be C, but is D
blob -> should be D, but is E
real ALWAYS real NOTE: A is missing!

---------------- END OUTPUT -----------------------------

As you can see, the output is off by one index (actually, the first field should be -1). The last field is always real  (cannot mapped anymore, because index is off). At MySQL 4.1.2 alpha the last one was random (real, unknown, ..)

An easy way to reproduce:
1) create the table
2) modify the script with your userid/pwd
3) run the script

Happy debugging! And hope I could be of some help.

Cheerio
/rudy
 [2004-07-19 16:31 UTC] georg@php.net
Works fine here! 
What does mysql_get_client_info() returns on your machine? 
 [2004-07-19 18:19 UTC] rudy dot metzger at xs4all dot nl
Darn, I used an old Mysql-shared library of 4.0.18, although I had server/client/devel of 4.1 installed. Removed the old shared rpms and compiled PHP anew and now it works flawlessly!

Sorry to raise this bogus Bug!!! But thanx alot for your quick response and reaction, great work!

Cheerio
/rudy
 [2004-07-19 23:08 UTC] georg@php.net
changing status: closed -> bogus 
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Mon Aug 19 16:01:27 2024 UTC