Запрос PDO mySql не выполняется в течение цикла во второй раз во время вызова - PullRequest
0 голосов
/ 08 февраля 2010

У меня есть проблема, я зациклился, бросил набор значений и затем создал запрос PDO mySql с каждым циклом, теперь проблема в том, что первый запрос выполняет и возвращает результаты, но второй вверх не возвращает результаты , Если я вручную выполняю запросы на сервере, они возвращают результаты. Это странно, может я здесь что-то не так делаю. Мой код ниже

if($num_results > 0){
 for($i=0;$i<$num_results;$i++){
   $sql_sub = "SELECT * FROM menu_config WHERE client_id =".$client_id ." AND id =".$data[$i]['root_menu_id'];

                    $results_s = $pdo->query($sql_sub);

                    $data_s = $results_s->fetchAll(PDO::FETCH_ASSOC);

                    $sub_menu_title = "<strong>".$data[$i]['title']."</strong>";

                    if(empty($data_s[0]['title'])){
                        $main_menu_title = '<span style="color:#FF0000;font-weight:bold;">No Main Menu Assigned to Sub Menu</span>';
                    }else{
                        $main_menu_title = $data_s[0]['title'];
                    }
                    $men_title = $data[$i]['title']
 }
}

1 Ответ

5 голосов
/ 08 февраля 2010

(это может быть немного больше, чем вы просили)

Вы, кажется, упускаете некоторые хорошие вещи, которые делают подготовленные заявления.

Во-первых, вы обычно не хотите передавать значения непосредственно в запрос. (иногда это необходимо, но не здесь). Делая это, вы убираете все хорошее, что защищает от инъекций SQL. Вместо этого вы хотите отправить их в качестве параметров после того, как подготовили запрос.

Во-вторых, находясь в цикле, вы можете сэкономить время и ресурсы, если вы выполняете один и тот же запрос снова и снова, подготавливая оператор, а затем изменяя только значения, отправляемые в этот подготовленный оператор, используя PDOStatement::bindParam() функция.

В-третьих, fetchAll() не принимает 'fetch_style' PDO :: FETCH_ASSOC. fetch() делает. Но я думаю, что вы можете обойтись по умолчанию или без использования fetchAll. Вам придется проверить это и посмотреть, что вам нужно. Вот Получить все документы

$sql_sub = "SELECT * FROM menu_config WHERE client_id = :client_id AND id = :id ";
$query = $pdo->prepare($sql_sub);
for($i=0;$i<$num_results;$i++){
   $query->bindParam(':client_id', $client_id);
   $query->bindParam(':id', $data[$i]['root_menu_id']);
   $query->execute();

   $data_s = $query->fetchAll();
   $sub_menu_title = "<strong>".$data[$i]['title']."</strong>";

   if(empty($data_s[0]['title'])){
      $main_menu_title = '<span style="color:#FF0000;font-weight:bold;">
            No Main Menu Assigned to Sub Menu</span>';
   }else{
      $main_menu_title = $data_s[0]['title'];
   }

   $men_title = $data[$i]['title'];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...