lev*_*nth 6 php sql-server-2008 symfony doctrine-orm
您好,我需要一些Symfony 3和MS SQL Server的帮助:
我正在使用Symfony 3并希望连接到MS SQL Server,我做了一些研究,发现默认情况下不支持它,但有一些Bundles可供使用.
在尝试了其中一些之后,我找到了一个部分为我工作的Bundle(realestateconz/mssql-bundle)但每次我尝试查询数据库时都会收到错误消息(我将其格式化为更具可读性):
Uncaught PHP Exception Doctrine\DBAL\DBALException: 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)]
Run Code Online (Sandbox Code Playgroud)
代码行看起来像这样
$user = $em->getRepository('AppBundle:User')->findBy(array('username' => $username));
Run Code Online (Sandbox Code Playgroud)
我的学说和symfony设置如下所示:
#config.yml
doctrine:
dbal:
driver_class: Realestate\MssqlBundle\Driver\PDODblib\Driver
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
Run Code Online (Sandbox Code Playgroud)
config.yml中的Port和Charset被注释掉了,因为我在stackoverflow上发现了一些关于在定义端口和字符集时使用MySQL的教义(虽然不记得确切位置).在parameters.yml中我无法添加DB的架构(表"User"的完整路径是database.web.[User])因为它将在另一个Error中运行.
Web服务器使用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
Run Code Online (Sandbox Code Playgroud)
据我所知,Doctrine从单行代码生成错误的SQL查询(MySQL-Syntax而不是MSSQL-Syntax),那么我该怎么办呢?或者是否有另一种方法可以在Linux上使用Symfony 3成功连接和查询MSSQL-Server?
小智 3
我自己找到了解决方案,您需要在 SQL-Server 使用的语法中为 Doctrine 提供实体的确切表名称。
对于 Symfony 使用的注释格式,它看起来像这样:
/** Annotation for your Classfile
* ExampleClass
*
* @ORM\Table(name="[ExampleClass]") <-- Square Brackets for MSSQL
* @ORM\Entity
*/
Run Code Online (Sandbox Code Playgroud)
将表名更改为 MSSQL 格式后,一切都按预期进行。
| 归档时间: |
|
| 查看次数: |
4168 次 |
| 最近记录: |