【发布时间】:2016-10-03 02:03:25
【问题描述】:
我正在编写代码以使用 PHP PDO 从头开始创建 MSSQL 数据库。我已经创建了数据库,现在需要执行从 .SQL 文件加载的一堆语句来创建表、数据等。前几行是
EXEC sp_dbcmptlevel 'myDbName', 120
GO
IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
BEGIN
EXEC [myDbName].[dbo].[sp_fulltext_database] @action = 'enable'
END
GO
ALTER DATABASE [myDbName] SET ANSI_NULL_DEFAULT OFF
GO
EXEC sp_dbcmptlevel 'myDbName', 120
...
如果我直接在 SSMS 中运行 .SQL 文件,它会完美运行。如果我加载它并通过 PHP PDO 执行它,我会得到 p>
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: [Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Incorrect syntax near 'GO'.' in ...
查看探查器,我的查询被前缀/包装了
declare @p1 int
set @p1=NULL
exec sp_prepexec @p1 output,NULL,N'EXEC sp_dbcmptlevel ''myDbName', 120
...
并且似乎使用准备好的执行包装器,服务器不喜欢它。我正在执行从 SQL 文件加载的脚本
$db = new PDO('sqlsrv:Server='.$serverName.';Database='.$databaseName, $username, $password);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::SQLSRV_ATTR_ENCODING, PDO::SQLSRV_ENCODING_UTF8);
$db->prepare($mySqlScript)->execute();
如何修复语法错误以执行 PHP 从 SQL 文件加载的整个命令集?
【问题讨论】:
标签: php sql sql-server tsql pdo