1

基本上问题是我的数据库表中有一列日期,我想计算每个特定日期的数量并将其存储在一个数组中。我已经解决这个问题一周了,到目前为止我我想出了这个。

<?php

function vref($arr) {
 if (strnatcmp(phpversion(),'5.3') >= 0) {
  $refs = array();
  foreach($arr as $key => $value) $refs[$key] = &$arr[$key];
  return $refs;
 }
 return $arr;
}

$mysqli = new mysqli("localhost", "root","" , "ti_project");

$bind = 'sssss';
$feedbackdate = array($bind);

$query = "SELECT dateTime FROM feedback";
$result = $mysqli->prepare($query);
$result->execute();
$result->bind_result($Date);
while ($result->fetch()){
    $feedbackdate[] = array($Date);
}

$rawQuery = 'SELECT COUNT(*) FROM feedback WHERE dateTime IN (';
$rawQuery .= implode(',',array_fill(0,count($feedbackdate),'?'));
$rawQuery .= ')';

$stmt = $mysqli->prepare($rawQuery);
call_user_func_array(array($stmt,'bind_param'),vref($feedbackdate));
$stmt->execute();
$stmt->bind_result($count);

while ($stmt->fetch()) {
    printf ("%s\n", $count);
}

?>

但在这里我得到了错误

mysqli_stmt::bind_param():变量的数量与准备好的语句中的参数数量不匹配。

那么如何做到这一点呢?

4

2 回答 2

0

您的参数数组由数组组成,我认为这不是您想要的:

代替:

while ($result->fetch()){
    $feedbackdate[] = array($Date);
}

经过:

while ($result->fetch()){
    $feedbackdate[] = $Date;
}

此外,你已经用一个元素初始化了你的数组,这是没有意义的。所以替换:

$feedbackdate = array($bind);

和:

$feedbackdate = array();

然后使用execute()的可选参数可以更容易地注入这些参数:

$stmt = $mysqli->prepare($rawQuery);
$stmt->execute($feedbackdate);
于 2016-01-25T16:49:02.893 回答
0

我不知道为什么你需要做两个查询来获得你正在寻找的结果集。此查询将按日期对结果进行分组并对它们进行计数:

SELECT dateTime, COUNT(*) FROM feedback GROUP BY dateTime;

这将输出如下内容:

+-----------------------+-------+
| dateTime              | count |
+-----------------------+-------+
|2016-01-25 00:00:00    | 1     |
|2016-01-24 00:00:00    | 2     |
+-----------------------+-------+

那是您所追求的数据类型吗?

于 2016-01-25T16:53:33.153 回答