Arama sırasında PDO mySql sorgu döngüsü için ikinci kez yukarı yürütme değil

1 Cevap php

Ben bir değerler kümesi attı döngü ve daha sonra her döngü ile bir PDO mySql sorgu oluşturma ediyorum, bir sorunu var, şimdi sorun ilk sorgu yürütme ve sonuçları dönen, ancak ikinci yukarı sonuçları dönen edilmez olduğunu. Ben elle sunucu üzerinde sorguları yürütmek onlar sonuçları döndürür. Bu belki de burada yanlış bir şey yapıyorum, çok garip. Aşağıda benim kod

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 Cevap

(this may be a little more than you asked for)

Sen tablolar yapmak hazırlanan bazı iyi şeyler eksik gibi görünüyor.

Öncelikle, genellikle doğrudan sorgu içine değerleri geçirmek istemiyorum. (Bazen burada değil zaten gerekli, ama). Bunu yaparak, SQL enjeksiyon korur tüm iyi şeyler çıkar. Bunun yerine size sorgu hazırladım sonra parametre olarak göndermek istiyorum.

Ne zaman bir döngü içinde size bildirimde hazırlayarak ve üzerinde aynı sorguyu çalıştıran, ve sonra sadece kullanarak bu hazırlanan açıklamaya için göndermek değerlerini değiştirerek eğer İkincisi, kendinizi zaman ve kaynak tasarrufu {[(0) ]} function.

Üçüncü olarak, fetchAll() PDO'nun bir 'alım_tarzı' almaz :: FETCH_ASSOC. fetch() yapar. Ama fetchAll kullanarak varsayılan veya hiçbiri ile alabilirsiniz düşünüyorum. Bunu içine çek ve ne gerek görmek gerekir. Burada the fetchAll docs vardır

$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'];
}