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

时间:2010-02-08 09:07:55

标签: 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']
 }
}

1 个答案:

答案 0 :(得分:5)

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

你似乎错过了准备陈述的一些好事。

首先,您通常不希望将值直接传递给查询。 (有时候这是必要的,但不是这里)。通过这样做,你可以取出所有保护sql注入的好东西。相反,您希望在准备好查询后将它们作为参数发送。

其次,在循环中,如果您通过准备语句反复运行相同的查询,然后只使用{{{}更改您发送到该预准备语句的值,则可以节省自己的时间和资源。 1}}功能。

第三,PDOStatement::bindParam()没有采用PDO :: FETCH_ASSOC的'fetch_style'。 fetchAll()。但我认为你可以使用默认值或使用fetchAll来实现。你必须检查它,看看你需要什么。以下是the fetchAll docs

fetch()