添加到数组和循环变量


add to array and loop variable

我有一个脚本,它在一组数据中循环,并在循环时调用一个函数:

$d = $dbh->prepare("
    SELECT  * 
    FROM    xeon_users_rented 
    WHERE   since       <= unix_timestamp(CURRENT_TIMESTAMP - INTERVAL 14 day) 
        AND clicks_last <= unix_timestamp(CURRENT_TIMESTAMP - INTERVAL 14 day)
");
$d->execute();
$rows      = $d->fetchAll(PDO::FETCH_ASSOC);
$new_array = array();
foreach ($rows as $data ) {
     $new_array[]      = $data['id'];
     $userToRecycleFor = $data['user_by'];
     $outcome          = $rentedrefs->_recycleMulti(
                            0,
                            $userToRecycleFor,
                            $new_array,
                            1
                        );
}   

这是我的函数_recycleMulti();:

function _recycleMulti($ceny, $referer, $recycle_array, $free=false){
    global $dbh;
    $this->ceny['rec'] = $ceny;
    $totalrecycle = count($recycle_array);
    $koszyk       = $this->ceny['rec'] * count($recycle_array);
    $referer_sql = $dbh->prepare("
        SELECT  * 
        FROM    `users` 
        WHERE   `username` = :referer 
        LIMIT   1;
    ");
    $referer_sql->bindParam(':referer', $referer);
    try {
        $referer_sql->execute();
    }
    catch (PDOException $e) {
        _OP_ERROR($e->getMessage(), __FILE__, __LINE__);
    }
    $referer_dane        = $referer_sql->fetch();
    $referer_dane_accont = $referer_dane['membership'];

    for( $i = 0; $i < count($recycle_array); $i++ ){
        # Expires
        $recycle_sql = $dbh->prepare("
            SELECT  *   
            FROM    `users_rented` 
            WHERE   `id` = :id 
            LIMIT   1;
        ");
        $recycle_sql->bindParam(':id', $recycle_array[$i]);
        $recycle_sql->execute();
        $recycle = $recycle_sql->fetch();
        echo "row count:";
        echo $recycle_sql->rowCount();
        if( $recycle_sql->rowCount() == 0 ){
            return false;
        }
        if( ! $recycle_sql 
            || ( $recycle_sql->rowCount() == 0 ) 
            || $recycle['user_by'] != $referer_dane['username'] ){
            return false;
        }
        return true;
    }

现在,我的问题是,它运行得很好。虽然这只是第一次运行,但它是有效的。我添加了这个:

echo "row count:";
echo $recycle_sql->rowCount();

结果是:

row count:1row count:0row count:0row count:0row count:0row count:0row count:0row count:0row count:0row count:0row count:0row count:0row count:0row count:0row count:0row count:0row count:0row count:0row count:0

正如您所看到的,这只是它第一次运行,有一个有效的行。

我做错了什么?

rowCount():的文档中有正确的解释

如果关联的PDOStatement执行的最后一条SQL语句是SELECT语句,某些数据库可能会返回行数由该声明返回。然而,这种行为并不能得到保证适用于所有数据库,不应依赖于可移植应用程序。

换句话说,rowCount()不会提供任何关于代码是否有效的信息。

若要检查您的查询是否成功,请检查execute()fetch()的返回值,失败时均返回false。在后一种情况下,请确保使用===进行比较以匹配类型。此外,如果查询失败,函数还会抛出带有附加信息的异常。查看fetch()关于如何处理这些异常的示例。

除此之外,您根本没有在$recycle中使用结果。