使用php

时间:2018-01-07 11:26:47

标签: php mysql

我需要从MySQL检索多个结果,并且必须多次使用相同的查询,并在"and"子句中添加"where"。 例如:

我的第一个问题:

$class = "SELECT * FROM schools WHERE class= '8'";

我的其他疑问:

$class8a ="SELECT * FROM schools WHERE class= '8' AND SECTION= 'A'";
$class8b ="SELECT * FROM schools WHERE class= '8' AND SECTION= 'B'";

...等。 同样适用于学校的所有其他课程。 我目前一次又一次地编写查询但我想知道是否有更简单的方法可以通过从数组中的数据库中检索结果然后过滤它来进行后续查询。

3 个答案:

答案 0 :(得分:2)

$class8a ="SELECT * FROM schools WHERE class= '8' AND SECTION= 'A'";

您将查询存储到文本变量中,这意味着您打算稍后使用它,然后您将编写$class8a

$db->query($class8a);

这可能会让您遇到另一个问题:您必须知道类8,A 存在。如果添加或删除了一个类,则需要重写代码,这样做效率低,而且容易出错。

所以这样做的一种方式可能是获取学校中的所有课程和所有部分并填充数组

$query = "SELECT DISTINCT class, section FROM schools";
$stmt  = $db->query($query);
$pairs = [ ]; // or $pairs = array(); in older PHPs
while ($pair = $stmt->fetch()) {
    if (!array_key_exists($pair['class'], $pairs) {
        $pairs[$pair['class']] = [];
    }
    $pairs[$pair['class']][$pair['section']] = "SELECT * FROM schools WHERE class= '{$pair['class']}' AND section = '{$pair['section']}'";
}

现在,您可以使用$pairs['8']['A']代替$class8a。或者您可以使用变量定义变量:

while ($pair = $stmt->fetch()) {
    $nameOfVar = $pair['class'] . strtolower($pair['section']);
    $$nameOfVar = "SELECT * FROM schools WHERE class= '{$pair['class']}' AND section = '{$pair['section']}'";
}

但是使用命名变量,您仍然无法轻松知道 $class7f是否存在(您可以使用{{1但是我觉得它很尴尬),更不用说枚举它们或知道哪些类可能存在,而对于数组,你可以(使用{{} 1}})。

如果有人创建了一个辅助部分(你有那些吗?)并调用它,比如isset而不是foreachA'或{{ 1}}"因为父母或学生可能会认为一个星星,一个加号或一个额外的一半被判断为判断。虽然A*被代码视为SQL注入攻击:A+是语法错误。

现在你必须在内存中留下许多类似的问题。

推荐的解决方案

更好的是,一旦你有了课程和部分,只需动态构建查询:

A1/2

然后执行,使用PDO,这只是工作

A'

您可以使用数组来跟踪事物并了解存在哪些类:

WHERE section='A'';

这允许您例如在HTML中放置一个类组合:

$classQuery = $db->prepare('SELECT * FROM schools WHERE class=? AND section=?');

答案 1 :(得分:1)

将所有类放在一个数组中,例如$classArray = ['8','9'];和另一个数组中的部分,例如$sectionArray = ['A','B'];现在您运行查询以迭代classArray,然后sectionArray,例如

foreach($classArray as $className)
{
  foreach($sectionArray as $sectionName)
  {
          $qry = 'SELECT * FROM schools WHERE class="'.$className. '" AND section ="'.$sectionName.'"';
    // Your Code 
  }
}

答案 2 :(得分:1)

您可以使用变量来存储类似的查询,例如

$and ="AND SECTION= 'A'";

并在主查询中使用该变量以满足您的特定要求。

$class = "SELECT * FROM schools WHERE class= '8'";

$class = "SELECT * FROM schools WHERE class= '8' $and";

您可以使用条件将查询设置为任何变量。 我认为这是有道理的。