Php 使用PDO查询时捕获错误

Php 使用PDO查询时捕获错误,php,mysql,database,pdo,try-catch,Php,Mysql,Database,Pdo,Try Catch,我有一部分代码导入.sql文件以这种方式执行: <?php $Server = "localhost"; $Db = "test"; $User = "root"; $Pass = ""; function exec_file($File_Path) { global $Server,$Db,$User,$Pass; $Con = new PDO("mysql:host=$Server;dbname=$Db",$User,$Pass); $Con->

我有一部分代码导入.sql文件以这种方式执行:

<?php
$Server = "localhost";
$Db     = "test";
$User   = "root";
$Pass   = "";

function exec_file($File_Path) {
  global $Server,$Db,$User,$Pass;  

  $Con = new PDO("mysql:host=$Server;dbname=$Db",$User,$Pass);
  $Con->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

  try {
    $Sql = file_get_contents($File_Path);
    $Res = $Con->exec($Sql);
  }
  catch (PDOException $Ex) {
    echo $Ex->getMessage();
  }
}

这是因为您试图将整个文件作为一个查询执行,因此当它到达第一个错误时,它将停止执行。您可以使用事务并执行每一行而不是整个文件,以便捕获所有错误并提交。如何将sql文本分解为sql语句以逐个执行?一种方法是启动事务,然后分解文件上的查询,并执行
foreach
。对于事务,执行它们所需的时间不会太长。也许您可以在分号“;”上分解文件,然后在得到的数组中循环。“分解”是疯狂的,行数据也包含这些分号