Цикл Foreach приводит к фатальной ошибке: вызов функции-члена bindParam () для необъекта - PullRequest
0 голосов
/ 02 августа 2010

Это первый раз, когда я получаю такую ​​ошибку, позвольте мне объяснить:

Вот мой код:

function printSiteIndexedItems($co, $id){
  global $allSections;
  foreach($allSections as $aSection => $aSectionName){
   $tr = $co->prepare("SELECT COUNT(id) FROM ". $aSection ." WHERE site=:id AND valide=1");
   $tr->bindParam(':id', $id, PDO::PARAM_INT);
   $tr->execute();
   if($indexedItems = $tr->fetchColumn()) echo '<p>'. $aSectionName .' : '. $indexedItems .'</p>';
  }
 }

Первая итерация работает просто отлично, она печатает то, что я хочу (название категории и количество элементов в ней).

Но после этой первой итерации я получаю классическую ошибку:

Неустранимая ошибка: вызов функции-члена bindParam () для необъекта в

Действительно, $ co является допустимым объектом PDO, так как он работает для первой итерации. Но похоже, что как только мы войдем во второй, его уже нет? : О

Я немного новичок в PDO, так что, возможно, это нормальное поведение, которое я еще не признал. Пожалуйста помоги ! =) * * 1016

Ответы [ 3 ]

2 голосов
/ 02 августа 2010

Похоже, $co->prepare... возвращает ЛОЖЬ хотя бы для одного штампа, который вы пытаетесь подготовить.
Либо протестируйте if ( !$tr ) ...., либо установите $co->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);, чтобы получить исключение, когда PDO обнаружит ошибку.

0 голосов
/ 02 августа 2010

Скорее всего $aSection недействительно. Поскольку вы не предоставили данные, трудно угадать. пожалуйста, узнайте об обработке ошибок PDO: http://de.php.net/manual/en/pdo.error-handling.php

что-то вроде этого кода должно помочь:

foreach($allSections as $aSection => $aSectionName){
   $tr = $co->prepare("SELECT COUNT(id) FROM ". $aSection ." WHERE site=:id AND valide=1");
   if (!$tr) {
       print_r($co->errorInfo());
       continue;
   }

   $tr->bindParam(':id', $id, PDO::PARAM_INT);
   $tr->execute();
   if($indexedItems = $tr->fetchColumn()) echo '<p>'. $aSectionName .' : '. $indexedItems .'</p>';
}
0 голосов
/ 02 августа 2010

Я думаю, что $ co-> prepare возвращает ошибку (вероятно, false), что говорит о том, что утверждение недопустимо.Убедитесь, что $ aSection не пусто.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...