只需PDO选择不工作

时间:2017-08-05 12:38:54

标签: php mysql pdo

这让我很生气。

以下给出了输出:

 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中,我什么也得不到......

0 个答案:

没有答案