[Phpmyadmin-devel] current HEAD, MySQL 4.0.x and mysqli

Marc Delisle Marc.Delisle at cegepsherbrooke.qc.ca
Fri Oct 14 07:45:39 CEST 2005

Marc Delisle a écrit :
> Sebastian Mendel a écrit :
>> Marc Delisle wrote:
>>> Hi,
>>> can someone reproduce this? HEAD no longer works correctly with MySQL 
>>> 4.0.x, with mysqli extension. Many symptoms occur, for example: 
>>> structure only shows the first 7 fields of a table; insert no longer 
>>> works, etc.
>>> Looks like the output of SHOW FIELDS, when fetched in a loop by 
>>> PMA_DBI_fetch_assoc(), stops after reading the 7th row.
>>> Same server works well with QA_2_6_4 + mysqli extension. Works well 
>>> with HEAD + mysql extension.
>>> I know that mysqli is targeted to MySQL 4.1.x+, but...
>> oh, i dont see there any 'but'
>> mysqli uses many new api functions not supported by mysql <4.1
>> i think we should and can not take care of this ...
> I'll continue my testing. I have the problem with PHP 5.1.0-dev of last 
> week. Maybe we should at least give a warning to phpMyAdmin users. Let 
> me talk to Georg about this.
> Marc

Ok, it looks like a PHP problem (seen at least in 5.1.0-dev). I have put 
a workaround in mysqli.dbi.lib.php. The PHP problem itself is not 
specific to MySQL 4.0.x and I reported it to Georg.

To reproduce:
$link = mysqli_init();
mysqli_options($link, MYSQLI_OPT_LOCAL_INFILE, TRUE);

$server_port = FALSE;
$server_socket = NULL;
$client_flags = 0;

$server = "";
$user = "";
$password = "";

mysqli_real_connect($link, $server, $user, $password, FALSE, 
$server_port, $serv
er_socket, $client_flags);

mysqli_select_db($link, 'mysql');

$result = mysqli_query($link, 'SHOW FULL FIELDS FROM user', 

$fields_cnt = mysqli_num_rows($result);

echo '<pre>';
while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
     echo '<hr>';
     $num = mysqli_num_fields($result);
     $fields = mysqli_fetch_fields($result);
     if (is_array($fields)) {
         echo '$fields is an array';
     } else {
         echo 'why $fields is not an array?';
echo '</pre>';

Now a question: in mysqli.dbi.lib.php, function 
PMA_mysqli_fetch_array(), when this function is called by

function PMA_DBI_fetch_assoc($result) {
     return PMA_mysqli_fetch_array($result, MYSQLI_ASSOC);

we only have ASSOC as a result, but in PMA_mysqli_fetch_array(), when we 
need to convert, we are looking for $data[$i]. This seems wrong to me
in this case since we won't get numeric indices.

This is why my workaround avoids converting the data.


More information about the Developers mailing list