【问题标题】:使用 sqlite 的 Symfony/Doctrine 功能测试导致 SQLSTATE[HY000]:一般错误:1 在“(”附近:语法错误
【发布时间】:2022-01-21 23:13:21
【问题描述】:

我有一个使用 Doctrine 和 liip_test_fixtures_bundle 的 Symfony 应用程序。

  • PHP 版本:7.4.25
  • Symfony 运行时版本:5.3.11
  • 原则 DBAL:3.2.0

我将 Doctrine 设置为使用 sqlite 连接进行测试。运行测试时出现以下错误:

Doctrine\DBAL\Exception\SyntaxErrorException: An exception occurred while executing a query: SQLSTATE[HY000]: General error: 1 near "(": syntax error

我将错误跟踪到Doctrine\DBAL\Schema\SqliteSchemaManager::_getPortableTableIndexesList,在该处执行以下查询“SELECT * FROM PRAGMA_TABLE_INFO (?)”。

以下最小示例重现了该问题。请注意,它只使用 PDO。

<?php

// setup
$pdo = new PDO( 'sqlite:'.__DIR__.'/test.db');
$pdo->exec(<<<SQL
CREATE TABLE `test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `content` varchar(1000) COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`),
) DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
SQL);

// this line causes the error
$stmt = $pdo->prepare('SELECT * FROM PRAGMA_TABLE_INFO (?)');
if( !$stmt instanceof PDOStatement )
{
    echo "Error occured\n";
    echo "\n";
    echo "Error Code: ".$pdo->errorCode()."\n";
    $info = $pdo->errorInfo();
    foreach( $info as $k => $v )
    {
        echo "   $k => $v\n";
    }
    exit(128);
}

echo "No syntax Error detected \n";

/// outputs
Error occured

Error Code: HY000
   0 => HY000
   1 => 1
   2 => near "(": syntax error

有没有办法配置 Doctrine 不使用准备好的 Sqlite 数据库语句?

【问题讨论】:

    标签: php sqlite symfony pdo doctrine


    【解决方案1】:

    通过将教义/dbal 限制为 3.1.5 版本暂时解决了该问题。

    我相信这个错误是由这个提交引起的:https://github.com/doctrine/dbal/commit/55259d55b3b80ac43c7ff9b592bf5f8c30a4af2e

    【讨论】:

      猜你喜欢
      • 2017-10-27
      • 1970-01-01
      • 2018-07-03
      • 2012-10-24
      • 2018-06-18
      • 2012-10-25
      • 2014-12-31
      • 2019-01-04
      相关资源
      最近更新 更多