以下给出了输出:
function transaction_graph(){
$date_start = "2017-08-04 01:51:29";
$date_end = "2017-08-05 01:51:29";
$trans_start = 1;
$trans_end = 60;
// prepare sql and bind parameters
$query = "SELECT dtime, url, sale
FROM sales
WHERE dtime BETWEEN :start_date AND :end_date
ORDER BY
dtime ASC
LIMIT :trans_start, :trans_end";
$stmt = $this->conn->prepare($query);
$stmt->bindParam(':start_date', $date_start, PDO::PARAM_STR);
$stmt->bindParam(':end_date', $date_end, PDO::PARAM_STR);
$stmt->bindParam(':trans_start', $trans_start, PDO::PARAM_INT);
$stmt->bindParam(':trans_end', $trans_end, PDO::PARAM_INT);
$stmt->execute();
return $stmt;
}
此函数是类的方法。但是,当我用$ this-> date_start等替换PDO过程的bindParam中的变量并注释掉变量时,我没有得到查询结果。然而,对象的这些属性肯定被定义为我成功地回应它们。此外,它们与我在测试它时定义变量的字符串完全相同。最后我还通过捕获检查错误,但我没有错误。
任何人都知道我缺少什么?
这是我定义对象属性并调用方法的方法:
$trans_start = $stocks->trans_start = 1;
$trans_end = $stocks->trans_end = 60;
$end = date('"Y-m-d h:i:s"', strtotime('now'));
$start = date('"Y-m-d h:i:s"', strtotime('- 1 hours'));
$stocks->date_start = $start;
$stocks->date_end = $end;
$stmt = $stocks->transaction_graph();
$sales_array = [];
$max = 0;
while($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
var_dump($row);
$sales_array[] = $row;
//find the greatest sales value in the range
if($row['sale'] > $max)
{
$max = $row['sale'];
}
}
只有当我将类方法定义为最初发布时,var转储才会返回所有内容 - 即代码有效。一旦函数顶部的变量被注释掉,并且我将对象属性放在bindParam中,我什么也得不到......