PHP PDOを使用してMSSQLデータベースをゼロから作成するコードを書いている。私は、データベースが作成されていて、今のテーブルを作成するために、.SQLファイルからロードされた文の束を実行する必要があり、データなど私が直接.SQLファイルを実行すると最初の数行はPDO経由で文のバッチを実行するときに構文エラーが発生するが、SSMS経由で問題ない
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では、完全に動作します。私はそれをロードし、PHP PDO経由でそれを実行した場合、私は
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ファイルからコマンドのPHPの負荷のセット全体を実行するために、構文エラーを修正するにはどうすればよい
$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();
でSQLファイルから読み込むスクリプトを実行していますか?
よろしくお願い致します。それはハックとして私の心を越えたが、必要な方法ではなかった。どのような理由で、スクリプト全体をダンプできないのか、あなたは知っていますか?パフォーマンスの問題を考えてみると、すべてを一度に処理できる方が良いでしょう。 – walshy002000
おそらく、それは図書館の目標の1つではなく、実装するのが簡単な動作なので、それを処理するために残されました。 'function execScript($ scriptPath){//分割と実行}'のようにコードを記述することができます。また、元のライブラリの一部であった場合のようにコード内で処理することができます。これは、図書館が何らかの形で(多かれ少なかれ)何をするかということです。 – espino316