3

ここに私がこれまでに持っているものがあります:

/**
 * @param PDO $db
 * @param string $file
 */
function run_sql_file($db, $file) {
    $sql = file_get_contents($file);
    try {
        $affected = $db->exec($sql);
        println("$affected row(s) affected");
    } catch(PDOException $e) {
        exitmsg($e->getMessage());
    }
}

すべてのクエリを実行しているように見えますが、常に「0 行が影響を受けました」と返されます。各ステートメントの影響を受ける行数を取得する方法はありますか? できれば、関連するクエリ、およびエラー メッセージと警告と共に。

4

3 に答える 3

3

同じ問題が発生しました。たとえば、ファイルから一連のmysqlドロップテーブルSQLを読み取り、それらを単一のPDO-> exec()で実行したいとします。

    $dbh = new PDO('mysql:host=test;dbname=db1', 'user', 'pass');
  try {

    $dbh->exec('drop table test_table1;drop table test_table2;');
  }
catch(PDOException $e)
{
    echo $e->getMessage();
    die();
}

最初のドロップSQLが成功した場合、2番目のドロップSQLが失敗した場合でも、例外は発生しません(そのテーブル名はもう存在しません)。最初のsqlが失敗した場合にのみ、すべてのsqlが実行されたかどうかを確認する方法はないようですPDO_MYSQLND;。その後、PDO例外が発生します。

于 2012-10-11T13:02:03.720 に答える
0

実行後に count 変数を設定してみてください。

$db->e​​xec($sql);

$affected = $db->rowCount();

于 2012-09-05T21:05:04.550 に答える