0

sqlsrv拡張機能を使用してPHPからパラメーターを使用してSQLServerストアドプロシージャを呼び出すためのドキュメントでは、奇妙な構文を使用しています。

{call SubtractVacationHours( ?, ?)}

私が期待するのは:

EXEC SubtractVacationHours ?, ?;

T- SQLストアドプロシージャを実行するためのSQLServerのドキュメントでは、EXEC | コマンドワードとしてEXECUTE。したがって、クエリによってエラーが発生すると思いました。

sqlsrv_query指定されたパラメーターを使用して(つまり、疑問符を値に置き換えて)、EXECSubtractVacationHoursのSQLを使用して呼び出すことができます。

パラメータ化されたクエリについてさらに調査したところ、「CALL」はODBCプロバイダーを介して呼び出す必要があるために発生したようです。

では、2番目のEXEC構文は実際に機能しますか?または、sqlsrvドライバーを介したパラメーター化されたストアドプロシージャの呼び出しでは、ODBC CALL構文を使用する必要がありますか?

4

1 に答える 1

0

私は自分のコードでテストしましたが、両方の形式の構文が機能します。2008年2月のBreakingAPIの変更に関するこのIISブログ投稿によると、CALL構文を使用することをお勧めします。

これで、正規呼び出し構文を使用してそのストアドプロシージャを呼び出すことができます。これは、PHP用のSQLServer2005ドライバーを使用するストアドプロシージャに推奨されます。

$sql = '{? = CALL CreateProduct (?, ?, ?, ?)}';
于 2012-10-10T12:14:42.660 に答える