嗨,我需要一些关于Symfony 3和MS SQL Server的帮助:
我正在使用Symfony 3,并想连接到MS SQL Server,我做了一些研究,发现它在默认情况下不受支持,但有一些Bundle可供使用。
在尝试了其中的一些之后,我发现了一个对我部分有效的Bundle(realestateconz/mssql Bundle),但每次我尝试查询DB时都会收到一条错误消息(我将其格式化为更可读):
Uncaught PHP Exception DoctrineDBALDBALException: An exception occurred while executing
'SELECT
t0.id AS id_1,
t0.username AS username_2
FROM user t0
WHERE t0.username = ?' with params ["testusername"]:
SQLSTATE[HY000]: General error: 156 General SQL Server error:
Check messages from the SQL Server [156] (severity 15) [(null)]
代码行看起来像这个
$user = $em->getRepository('AppBundle:User')->findBy(array('username' => $username));
我的学说和符号设置如下:
#config.yml
doctrine:
dbal:
driver_class: RealestateMssqlBundleDriverPDODblibDriver
host: "%database_host%"
#port: "%database_port%"
dbname: "%database_name%"
user: "%database_user%"
password: "%database_password%"
#charset: UTF8
#parameters.yml
parameters:
database_host: myserver
database_name: database #without schema
database_user: user
database_password: pw
config.yml中的端口和字符集被注释掉了,因为我在stackoverflow上发现了一些关于定义端口和字符集中使用MySQL的原则的内容(但记不清具体在哪里)。在parameters.yml中,我无法添加DB的架构(表"User"的完整路径是database.web.[User]),因为它将在另一个错误中运行。
Webserver运行带有apache2、php5.6(包括php5-sybase包)的Ubuntu 16.04,我使用freetds连接到MSSQL Server(手动连接工作)。
以下是我的FreeTDS设置:
[MYSERVER]
host = myserveradress
port = 1433
tds version = 8.0
client charset = UTF-8
text size = 20971520
据我所知,Doctrine从单行代码中生成了错误的SQL查询(MySQL语法而不是MSSQL语法),那么我该怎么做才能解决这个问题呢?或者,是否有其他方法可以使用Symfony 3在Linux上成功连接和查询MSSQL Server?
我自己找到了解决方案,您需要在SQL Server使用的语法中为Doctrine提供实体的确切表名。
对于Symfony使用的注释格式,它看起来像这样:
/** Annotation for your Classfile
* ExampleClass
*
* @ORMTable(name="[ExampleClass]") <-- Square Brackets for MSSQL
* @ORMEntity
*/
在将表名更改为MSSQL格式之后,一切都如预期的那样工作。