-3
$db->beginTransaction();
$del = $db->prepare('DELETE FROM hesabat_filter WHERE model_id NOT IN (SELECT res_id FROM result)');
$del->execute();
$del = $db->prepare('DELETE FROM hesabat_istilik WHERE model_id NOT IN (SELECT res_id FROM result)');
$del->execute();
$del = $db->prepare('DELETE FROM hesabat_nem WHERE model_id NOT IN (SELECT res_id FROM result)');
$del->execute();
$del = $db->prepare('DELETE FROM hesabat_rek WHERE model_id NOT IN (SELECT res_id FROM result)');
$del->execute();
$del = $db->prepare('DELETE FROM hesabat_soyuqluq WHERE model_id NOT IN (SELECT res_id FROM result)');
$del->execute();
$del = $db->prepare('DELETE FROM hesabat_vent WHERE model_id NOT IN (SELECT res_id FROM result)');
$del->execute();
$db->commit();

$count = $del->rowCount();
echo $count;

この PDO は正しく動作しますが、削除されたすべての行を数えることはできません。準備されたクエリごとに異なる変数を与えてから、変数を収集する必要があると思います。あなたのアイデアは何ですか?

4

2 に答える 2

3
  1. パラメータ化されたクエリを使用しておらず、クエリを再利用していない場合は、その必要はありませんprepare()。そのままできますquery()
  2. rowCount()最後のクエリのカウントのみを返します。そのため、何度も上書き$delしているため、もちろん最後のクエリのカウントしか取得できません。実行できる魔法はありませんrowCount。すべてのクエリの後に呼び出して合計を集計するだけです。
  3. queryしかし、 +の代わりに がrowCountありPDO::exec、これはまさにあなたが望むことをすでに行っています:

    PDO::exec()単一の関数呼び出しで SQL ステートメントを実行し、ステートメントの影響を受けた行数を返します。

    $totals  = $db->exec('DELETE ...');
    $totals += $db->exec('DELETE ...');
    ...
    
    echo $totals;
    
于 2013-11-02T11:59:50.383 に答える
1

各クエリの実行後にカウンター変数をインクリメントします..このように試してください

$count = 0;
$db->beginTransaction();
$del = $db->prepare('DELETE FROM hesabat_filter WHERE model_id NOT IN (SELECT res_id FROM result)');
$del->execute();
$count += $del->rowCount();
$del = $db->prepare('DELETE FROM hesabat_istilik WHERE model_id NOT IN (SELECT res_id FROM result)');
$del->execute();
$count += $del->rowCount();
$del = $db->prepare('DELETE FROM hesabat_nem WHERE model_id NOT IN (SELECT res_id FROM result)');
$del->execute();
$count += $del->rowCount();
$del = $db->prepare('DELETE FROM hesabat_rek WHERE model_id NOT IN (SELECT res_id FROM result)');
$del->execute();
$count += $del->rowCount();
$del = $db->prepare('DELETE FROM hesabat_soyuqluq WHERE model_id NOT IN (SELECT res_id FROM result)');
$del->execute();
$del = $db->prepare('DELETE FROM hesabat_vent WHERE model_id NOT IN (SELECT res_id FROM result)');
$del->execute();
$count += $del->rowCount();
$db->commit();

echo $count;
于 2013-11-02T11:59:01.450 に答える