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'";
...等。学校の他のすべてのクラスについても同様です。私は現在何度もクエリを書いていますが、配列内のデータベースから結果を取得し、それを後続のクエリ用にフィルタリングすることで、これを行う簡単な方法があるかどうか疑問に思いました。
$class8a ="SELECT * FROM schools WHERE class= '8' AND SECTION= 'A'";
クエリをテキスト変数に格納します。つまり、後で使用する予定であり、そこに次のように記述します$class8a
。
$db->query($class8a);
これにより、おそらく別の問題が発生します。クラス8、セクションAが存在することを知っておく必要があります。クラスが追加または削除された場合は、コードを書き直す必要があります。これは効率的ではなく、恐ろしくエラーが発生しやすくなります。
したがって、これを行う1つの方法は、学校のすべてのクラスとすべてのセクションをフェッチして、配列にデータを入力することです。
$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
ません(使用できますisset
が、厄介だと思います)。配列を使用すると、(使用できますが、厄介だと思います)、それらを列挙したり、どのクラスが存在する可能性があるかを知ることはできません。を使用してforeach
)。
また、誰かが補助セクションを作成し(それらはありますか?)、「星、プラスまたは追加の半分が親または生徒によって判断的であると認識される可能性があるため」のA'
代わりにA*
、A+
またはA1/2
「 "。A'
コードによってSQLインジェクション攻撃として認識されている間:WHERE section='A'';
は構文エラーです。
そして、あなたは今、たくさんの同様のクエリをメモリに保持しなければなりません。
さらに良いのは、クラスとセクションができたら、その場でクエリを作成するだけです。
$classQuery = $db->prepare('SELECT * FROM schools WHERE class=? AND section=?');
次に実行するには、PDOを使用するとこれは簡単に機能します:
$classQuery->execute([ '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'];
}
これにより、たとえば、HTMLにクラスコンボを配置できます。
$combo = '<select name="class">';
foreach (array_keys($pairs) as $class) {
$combo .= "<option value=\"{$class}\">{$class}</option>";
}
$combo .= "</select>";
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加