Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 优化我的循环以返回,而不是执行10个查询_Php_Mysql_Arrays_Loops_Pdo - Fatal编程技术网

Php 优化我的循环以返回,而不是执行10个查询

Php 优化我的循环以返回,而不是执行10个查询,php,mysql,arrays,loops,pdo,Php,Mysql,Arrays,Loops,Pdo,我在下面的变量中以数组形式返回了有限数量的学生(10) $result变量是一个数组,它包含学生ID,如下例所示 Array ( [student1] => 4 [student2] => 1 [student3] => 3 [student4] => 2 [student5] => 5 [student6] => 10 [student7] => 12 [student8] => 16 [student9] => 17

我在下面的变量中以数组形式返回了有限数量的学生(10)

$result变量是一个数组,它包含学生ID,如下例所示

Array ( 
[student1] => 4 
[student2] => 1 
[student3] => 3 
[student4] => 2 
[student5] => 5 
[student6] => 10 
[student7] => 12 
[student8] => 16 
[student9] => 17 
[student10] => 18 
)
我尝试的

$values = implode(", ", $result);
$sql = "SELECT sub1, sub2 FROM students WHERE students.id IN (" . $values . ")";

try{
    $db = new db();
    $db = $db->connect();
    $stmt = $db->query($sql);

    $subject = $stmt->fetchAll(PDO::FETCH_OBJ);

    $db = null;
    if(empty($subject)) {
        $response->getBody()->write
        ('{"error":{"message":"Invalid Request}}');
    } else {
        $subject = json_decode(json_encode($subject), True);
        if (in_array("BIO", $subject))
          {
            return true;
          }
        else
          {
            return false;
          }
     print_r($subject);
    }
  } catch(PDOException $e) {}

如果您想在发出如下请求后执行查询,我可以确定如何在一次查询中优化我的查询,而不是循环10次查询:

$values = implode(", ", $result);
$sql = "SELECT sub1, sub2 FROM students WHERE students.id IN (" . $values . ")";
这将返回您所有的学生与一个请求


编辑:删除了foreach,谢谢不要惊慌

使用
IN()
子句,这比在你的循环中运行一个查询要有效得多。你能告诉我pls@BenM我是一个新手吗?把他们注册的不同科目放在学生表的列中真的会破坏规范化,并且在你继续开发时可能会给你带来其他麻烦。你应该考虑把招生分为一个单独的表格,将学生ID映射到指定的课程。谢谢你,我不同意,但是它不是一个可扩展的项目,只限于10个学生和2个子,每个人都需要用他们提供给我的DBOKAY的方法来解决这个问题。只是觉得值得一提。祝你好运这只返回了第一个学生sub1和sub2。foreach循环是一种非常冗长的方法,可以执行
$values=introde(“,”,$result)尝试打印$values以确保您拥有所有ID,并且查询仍然只返回第一个学生的sub1和sub2,而不是所有SUdent?让我们来看看。