执行多个查询时的Doctrine(DBAL)错误处理

时间:2016-01-13 12:08:01

标签: php sql pdo doctrine dbal

我有一个架构sql文件(语法错误),包括设置数据库的多个查询

example.sql

CREATE TABLE IF NOT EXISTS `example` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` text COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;


CREATExxxxxxxxxx TABLE IF NOT EXISTS `example2` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` text COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;

使用example.php

$sqlContent = file_get_contents("example.sql");
$stmt = $conn->prepare($sqlContent);
$result = $stmt->execute();
即使我的sql不正确,

execute方法也不会抛出任何异常。文档说它在失败时返回false但它返回true

我该如何处理异常处理?如何检查我的查询是否有错误?

1 个答案:

答案 0 :(得分:0)

问题不在于Doctrine DBAL,而在于PDO。如果您将驱动程序更改为mysqli(而不是pdo_mysql),那么您将收到如下错误消息:

  

[学说\ DBAL \异常\ SyntaxErrorException]
  执行' CREATE TABLE IF NOT NOT EXISTS时发生异常   example

`id` int(11) NOT NULL AUTO_INCREMENT,                                                                                                                                                   
`name` text COLLATE utf8_unicode_ci NOT NULL,                                                                                                                                           
PRIMARY KEY (`id`)                                                                                                                                                                         ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
     

AUTO_INCREMENT = 1;
  CREATExxxxxxxxxx表如果不存在example2

`id` int(11) NOT NULL AUTO_INCREMENT,                                                                                                                                                   
`name` text COLLATE utf8_unicode_ci NOT NULL,                                                                                                                                           
PRIMARY KEY (`id`)                                                                                                                                                                         ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
     

AUTO_INCREMENT = 1;':
  您的SQL语法有错误;检查手册   对应于您的MySQL服务器版本,以便使用正确的语法   靠近' CREATExxxxxxxxxx表如果不是example2
      id int(11)NOT NULL AUTO_I'在第8行

如果你直接使用PDO(不是通过Doctrine),那么你也不会收到错误。

如果您希望它能正常工作,那么您必须禁用预设语句的模拟(将PDO::ATTR_EMULATE_PREPARES设置为0)。