这是我到目前为止所得到的:
/**
* @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行受影响“。有没有办法获得每条语句受影响的行数?优选地,与相关查询以及任何错误消息和警告一起。
发布于 2012-10-11 21:02:04
我遇到了同样的问题,例如,我正在从一个文件中读取一系列mysql drop table 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();
}如果第一个drop sql成功,那么即使第二个drop失败也不会引发异常(该表名不再存在)。似乎没有办法使用PDO_MYSQLND;检查所有sql是否都已执行,如果第一个sql失败,则会引发PDO异常。
发布于 2012-09-06 05:05:05
尝试在执行后设置count变量:
$db->exec($sql);
$affected = $db->rowCount();
发布于 2012-09-06 05:31:42
假设您没有任何疯狂的SQL会破坏explode语句……
/**
* @param PDO $db
* @param string $file
*/
function run_sql_file($db, $file) {
$sql = file_get_contents($file);
$sql_lines = explode(';',$sql);
try {
foreach($sql_lines as $line) {
$affected += $db->exec($line);
}
println("$affected row(s) affected");
} catch(PDOException $e) {
exitmsg($e->getMessage());
}
}https://stackoverflow.com/questions/12289679
复制相似问题