php - PDO mySql 查询在调用时第二次没有在 for 循环中执行

标签 php mysql pdo

我有一个问题,我正在循环抛出一组值,然后在每个循环中创建一个 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']
 }
}

最佳答案

(这可能比您要求的多一点)

您似乎错过了准备好的语句所做的一些好事。

首先,您通常不想将值直接传递到查询中。 (有时是必要的,但这里不是)。通过这样做,您可以删除所有防止 sql 注入(inject)的好东西。相反,您希望在准备好查询后将它们作为参数发送。

其次,在循环中,如果您通过准备语句一遍又一遍地运行相同的查询,然后使用 PDOStatement::bindParam() 函数。

第三,fetchAll() 不采用 PDO::FETCH_ASSOC 的“fetch_style”。 fetch() 可以。但我认为您可以使用默认设置或不使用 fetchAll。你必须检查一下,看看你需要什么。这里是the fetchAll docs

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

关于php - PDO mySql 查询在调用时第二次没有在 for 循环中执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2220478/

相关文章:

php - 以安全的方式调用 php 页面

javascript - 如何在使用 Jquery 脚本时从 url 获取值?

mysql - key 1 的重复条目 '2014-02-28' 错误代码 : 1062

php - 在多列mysql子查询中获取最高ID

php - 无法检索数据,mysql php pdo

php - 在 PDO 中强类型参数的原因?

php - 使用HTML选项从MySQL插入和选择多个表

php - 有两个表的邻接表模型

mysql - 如何合并和删除新数据库上的现有主键?

php - 从多个表中获取数据的最佳方式