2015-08-12 2 views
0

Следующий код:PHP MySQLi подготовил оператор fetch - первая строка пуста?

 $con = ConnectDB::getConnection(); 
    if ($stmt = $con->prepare('---SQL here with 1 param---')) { 
     $stmt->bind_param('i', $this->id); 
     $stmt->execute(); 
     $stmt->bind_result($device_id, $device_identifier); 

     while ($stmt->fetch()) { 
      $device = new Device($device_identifier, $device_id); 
      $all_devices[] = $device; 
     } 

получает пустой результат? Первый раз через цикл, $ device_id и $ device_identifier пуст, но метод fetch() возвращает true, поэтому он запускается. ОДНАКО - ВТОРАЯ Итерация действительно содержит мой результат.

Я мог бы просто проверить, пусты ли они и игнорировать их, но я действительно не могу понять, почему он возвращает пустую пару? Я попытался запустить SQL непосредственно в БД, и он просто возвращает 1 строку результата?

Любые идеи?

+0

Вы определили '$ all_devices = array();'? – Eugen

ответ

0

Как вы можете себе представить, подготовленная команда MySQLi-запроса не возвращает пустую первую строку. Поскольку такое поведение будет иметь очень мало смысла.

Вам необходимо научиться создавать правильный доказательство ваших утверждений.
Код, который вы отправили, неверен. По какой-то причине вы пытаетесь судить о материи косвенными последствиями. Почему бы не исследовать сам вопрос?

$con = ConnectDB::getConnection(); 
if ($stmt = $con->prepare('---SQL here with 1 param---')) { 
    $stmt->bind_param('i', $this->id); 
    $stmt->execute(); 
    $stmt->bind_result($device_id, $device_identifier); 

    $stmt->fetch(); 
    var_dump($device_identifier, $device_id); 

- этот код будет вам сказать однозначно, если ваше предположение на пустой результат был правильным или неправильным.

После изучения этого, вы можете начать отладку , чтобы найти место в своем собственном коде, который отвечает за текущее поведение.

Надеюсь, это поможет.

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