我有一个问题,我循环抛出一组值,然后用每个循环创建一个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']
}
}
Run Code Online (Sandbox Code Playgroud)
(这可能比你要求的多一点)
你似乎错过了准备语句所做的一些好事.
首先,您通常不希望将值直接传递给查询.(有时候这是必要的,但不是这里).通过这样做,你可以取出所有保护sql注入的好东西.相反,您希望在准备好查询后将它们作为参数发送.
其次,在循环中,如果您通过准备语句反复运行相同的查询,然后只使用该PDOStatement::bindParam()函数更改发送到该预准备语句的值,则可以节省自己的时间和资源.
第三,fetchAll()不采用PDO :: FETCH_ASSOC的'fetch_style'.fetch()确实.但我认为你可以使用默认值或使用fetchAll来实现.你必须检查它,看看你需要什么.这是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'];
}
Run Code Online (Sandbox Code Playgroud)