Переключение php на mysqli: проблема num_rows

Недавно я начал обновлять некоторый код до улучшенного расширения MySQL и был достигнут успешный до этого момента:

// old code - works $result = mysql_query($sql); if(mysql_num_rows($result) == 1){ $row = mysql_fetch_array($result); echo $row['data']; } // new code - doesn't work $result = $mysqli->query($sql) or trigger_error($mysqli->error." [$sql]"); if($result->num_rows == 1) { $row = $result->fetch_array(); echo $row['data']; } 

Как показано, я пытаюсь использовать объектно-ориентированный стиль . Я не получаю ошибку mysqli, и vardump не говорит никаких данных … но определенно есть данные в таблице db.

Попробуй это:

 <?php // procedural style $host = "host"; $user = "user"; $password = "password"; $database = "db"; $link = mysqli_connect($host, $user, $password, $database); IF(!$link){ echo ('unable to connect to database'); } ELSE { $sql = "SELECT * FROM data_table LIMIT 1"; $result = mysqli_query($link,$sql); if(mysqli_num_rows($result) == 1){ $row = mysqli_fetch_array($result, MYSQLI_BOTH); echo $row['data']; } } mysqli_close($link); // OOP style $mysqli = new mysqli($host,$user, $password, $database); $sql = "SELECT * FROM data_table LIMIT 1"; $result = $mysqli->query($sql) or trigger_error($mysqli->error." [$sql]"); /* I have added the suggestion from Your Common Sence */ if($result->num_rows == 1) { $row = $result->fetch_array(); echo $row['data']; } $mysqli->close() ; // In the OOP style if you want more than one row. Or if you query contains more rows. $mysqli = new mysqli($host,$user, $password, $database); $sql = "SELECT * FROM data_table"; $result = $mysqli->query($sql) or trigger_error($mysqli->error." [$sql]"); /* I have added the suggestion from Your Common Sence */ while($row = $result->fetch_array()) { echo $row['data']."<br>"; } $mysqli->close() ; ?> 

В PHP v 5.2 mysqli :: num_rows не устанавливается перед извлечением строк данных из результата запроса:

 $mysqli = new mysqli($host,$user, $password, $database); if ($mysqli->connect_errno) { trigger_error(sprintf( 'Cannot connect to database. Error %s (%s)', $mysqli->connect_error, $mysqli->connect_errno )); } $sql = "SELECT * FROM data_table"; $result = $mysqli->query($sql); // a SELECT query will generate a mysqli_result if ($result instanceof mysqli_result) { $rows = array(); while($row = $result->fetch_assoc()) { $rows[] = $row; } $num_rows = $result->num_rows; // or just count($rows); $result->close(); // do something with $rows and $num_rows } else { //$result will be a boolean } $mysqli->close() ; 

Как было сказано, вы не проверяете ошибки.
Выполните все ваши запросы таким образом

 $result = $mysqli->query($sql) or trigger_error($mysqli->error." [$sql]"); 

если ошибки не отображаются, а дампы var не говорят никаких данных – тогда ответ прост: в вашем запросе не было данных. Проверьте запрос и данные в таблице.