Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.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 使用许多不同的参数计算表中的行数_Php_Mysql_Sql_Pdo - Fatal编程技术网

Php 使用许多不同的参数计算表中的行数

Php 使用许多不同的参数计算表中的行数,php,mysql,sql,pdo,Php,Mysql,Sql,Pdo,我知道我可以像这样计算表中的列中有多少行具有某个字符串 $timeOfClass="W-7PM-A"; $inclass101 = $db->prepare("SELECT count(*) FROM students WHERE timeOfClass =?"); $inclass101->execute(array($timeOfClass)); $inclass101rows = $inclass101->fetchColumn(0); $inClass

我知道我可以像这样计算表中的列中有多少行具有某个字符串

  $timeOfClass="W-7PM-A";
  $inclass101 = $db->prepare("SELECT count(*) FROM students WHERE timeOfClass =?");
  $inclass101->execute(array($timeOfClass));
  $inclass101rows = $inclass101->fetchColumn(0);
$inClass101rows
反映了我的数据库中
$timeOfClass
W-7PM-A
的行数


但是,如何在不编写多个SQL语句的情况下对
$timeOfClass
字符串的多个变量执行此操作?我有很多。这是否类似于生成一个SQL语句数组,然后通过
fetchColumn(0)
的while循环运行它们?

其中timeofclass位于(“值1,'值2'));
是正确的sql语法。您可以获取时间数组,创建in子句并将其连接到语句末尾。您还可以创建一个存储过程来处理查询,并将CSV值作为参数。
HTH

您是否尝试对$timeOfClass的几个值执行此操作

您可以将所有$timeOfClass变量放入一个数组(W-7PM-A、W-8PM-A等),然后使用如下sql:

选择计数(*) 来自学生 其中类的时间('W-7PM-A','W-8PM-A',…) 按课时分组


这将为您提供一个SQL查询,您可以在行中循环以获得单个计数。

示例:
WHERE timeOfClass IN('W-7PM-A','W-7PM-B','W-7PM-C');
(使用
中的
)然后是数组。如果您要问的是“如何拥有一个可变长度数组并将其传递到一个准备好的语句中?”“答案是你不能不跳过一些障碍。但是看看“数组”和“准备好的语句”以及pdo,你会发现一些方法很棒!但是,我如何分离结果以找到表中每个字符串的实例数?我不知道数据库抽象是如何工作的,但是您可以将
groupbytimeofclass
添加到SQL查询中,并对结果进行循环,它会给你每次上课的次数。你有一个双引号,其中应该是一个单引号&缺少一个单引号<代码>(“值1”,“值2”)
-重写
(“值1”,“值2”)
<?php

// $timesOfClasses is an array in the form:
$timesOfClass = array(
    "W-7PM-A",
    "X-8AM-Y",
    "...",
);


// Generate the IN clause safely for usage with prepared statements
$params = substr(str_repeat("?,", count($timesOfClass)), 0, -1);

$inclass101 = $db->prepare("SELECT COUNT(*) FROM `students` WHERE `timeOfClass` IN({$params})");
$inclass101->execute($timesOfClass);
$inclass101rows = $inclass101->fetchColumn(0);