我有一个循环遍历一组数据的脚本,并在执行此操作时调用函数:
$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
正如您所看到的,只有在第一次运行时,才会有一个有效的行。
我做错了什么?
答案 0 :(得分:1)
如果关联的PDOStatement执行的最后一条SQL语句是 一个SELECT语句,一些数据库可能会返回行数 由该声明返回。但是,不保证这种行为 适用于所有数据库,不应依赖于便携式数据库 应用
换句话说,rowCount()
不会提供您的代码是否有效的任何信息。
要检查您的查询是否成功,请检查execute()
或fetch()
的返回值,两者都会在失败时返回false
。在后一种情况下,请务必使用===
进行比较以匹配类型。此外,如果查询失败,函数会抛出包含其他信息的异常。检查the examples for fetch()
如何处理这些例外。
除此之外,您根本没有使用$recycle
中的结果。