Я столкнулся с проблемой при использовании 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
Любые идеи, почему это происходит?
** ПРЕДУПРЕЖДЕНИЕ **: Если у вас есть действительно веские причины, не используйте '@' подавления ошибок функции РНР. Это скроет ошибки, которые могут быть важны. – tadman
Его использование '@' разумно для кода 'mysql' - он берет управление, проверяет его и принимает меры. Для 'mysqli' он несколько сломан, так как он немедленно использует' NULL' '$ db_link' в качестве указателя. –
@Rick Я проверил '$ db_link', и это не' NULL', но я нашел некоторые проблемы с библиотекой mysqli, изменил ее на более старую версию и теперь она работает. –