2015-07-15 3 views
2

Я столкнулся с проблемой при использовании mysqli, и я не могу понять, почему это происходит.MySQLi возвращает ошибочные результаты

На сервере MariaDB 5.5.41 У меня есть таблица tbl1

a | b 
--+-- 
1 | 1 

Я создал следующий скрипт:

<?php 
$db_host="localhost"; 
$db_user="user"; 
$db_pass="pass"; 
$db_db="db_test"; 

// mysqli test 
$db_link = @new mysqli($db_host,$db_user,$db_pass,$db_db); 

if($db_link->connect_error) die("mysqli connect error"); 

$result = $db_link->query("SELECT a FROM tbl1 WHERE b='1'"); 
if(!$result) { 
    die("mysqli query error"); 
} else { 
    die("Row count:".$result->num_rows); 
} 
?> 

И результат:

Row count:0 

Но если я использую следующий код:

<?php 
$db_host="localhost"; 
$db_user="user"; 
$db_pass="pass"; 
$db_db="db_test"; 

//mysql 
$db_link = @mysql_connect($db_host,$db_user,$db_pass); 
if(!$db_link) die("mysql connect error"); 
mysql_select_db($db_db,$db_link); 

$result = mysql_query("SELECT a FROM tbl1 WHERE b='1'"); 
if(!$result) { 
    die("mysql query error"); 
} else { 
    die("Row count:".mysql_num_rows($result)); 
} 
?> 

И результат:

Row count:1 

Любые идеи, почему это происходит?

+0

** ПРЕДУПРЕЖДЕНИЕ **: Если у вас есть действительно веские причины, не используйте '@' подавления ошибок функции РНР. Это скроет ошибки, которые могут быть важны. – tadman

+0

Его использование '@' разумно для кода 'mysql' - он берет управление, проверяет его и принимает меры. Для 'mysqli' он несколько сломан, так как он немедленно использует' NULL' '$ db_link' в качестве указателя. –

+0

@Rick Я проверил '$ db_link', и это не' NULL', но я нашел некоторые проблемы с библиотекой mysqli, изменил ее на более старую версию и теперь она работает. –

ответ

-2

mysqli_fetch_row в PHP Manual mysqli_fetch_row

+0

Проблема заключалась не в извлечении данных из результата, а в том, что при использовании mysqli результат был пуст. –

Смежные вопросы