Phpinfoの出力は次のとおりです。 version.php
コードは次のとおりです。
$serverName = "X.X.X.X";
$connection = array( "UID"=>"UserID", "PWD"=>"Password123", "Database"=>"database_name");
$conn = sqlsrv_connect( $serverName, $connection);
if ($conn === false) {
$myfile3 = fopen("log.txt", "w");
fwrite($myfile3, sqlsrv_errors());
fclose($myfile3);
};
$tsql = "SELECT top 10 pName from products";
$stmt = sqlsrv_query( $conn, $tsql);
$row = sqlsrv_fetch_array($stmt);
$myfile4 = fopen("log.txt", "w");
fwrite($myfile4, $row[0]);
fclose($myfile4);
sqlsrv_free_stmt( $stmt);
sqlsrv_close( $conn);
ログファイルには何も書き込まれません。 fwrite($ myfile3、 "hardcoded text")でテキストをハードコーディングしたとしても;場所、何も書かれていません。
Php.iniファイルの拡張機能セクションは次のとおりです。
[ExtensionList]
;extension=php_mysql.dll
extension=php_mysqli.dll
extension=php_mbstring.dll
extension=php_Gd2.dll
extension=php_gettext.dll
extension=php_curl.dll
extension=php_exif.dll
extension=php_xmlrpc.dll
extension=php_openssl.dll
extension=php_soap.dll
extension=php_pdo_mysql.dll
extension=php_pdo_sqlite.dll
extension=php_imap.dll
extension=php_tidy.dll
extension=php_sqlsrv_7_nts_x64.dll
;extension=php_sqlsrv_7_ts_x64.dll
最後に、これらのすべてが必要というわけではありませんが、これらはextフォルダーにある4つのdllです。
php_sqlsrv_7_nts_x64.dll
php_sqlsrv_7_nts_x86.dll
php_sqlsrv_7_ts_x64.dll
php_sqlsrv_7_ts_x86.dll
pdo:を使用して
$serverName = "(local)\sqlexpress";
/* Connect using Windows Authentication. */
try
{
$conn = new PDO( "sqlsrv:server=$serverName ; Database=AdventureWorks", "", "");
$conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
}
catch(Exception $e)
{
die( print_r( $e->getMessage() ) );
}
手順:
$serverName = "(local)\sqlexpress";
$connectionOptions = array("Database"=>"AdventureWorks");
/* Connect using Windows Authentication. */
$conn = sqlsrv_connect( $serverName, $connectionOptions);
if( $conn === false )
die(sqlsrv_errors());
詳細については here をクリックしてください
まず、問題を特定する必要があります。これは、ファイルの書き込みに問題があるか、SQLサーバーへの接続に問題があるか、PHPセットアップに問題がありますか?
SQL Serverのトラブルシューティング
sqlsrv_errors()
をできるだけ詳細に呼び出すときに_SQLSRV_ERR_ALL
_フラグを使用し、die()
または単に_print_r
_/echo
(ファイルに書き込む代わりに)画面に結果が表示されるので、何か問題があるかどうかを確認できます。 _sqlsrv_connect
_ ドキュメントページの例をご覧ください。
次に、ポートを正しく指定していることを確認しようとします、例えば:
_$serverName = 'X.X.X.X, 1433';
_
または、SQL Serverインスタンスを指定します、例:
_$serverName = 'X.X.X.X\sqlexpress';
_
また、ユーザー、パスワード、データベース名がすべて正しいこと、指定したユーザーがそのデータベースに対する正しい権限を持っていることを確認してください。そしてもちろん、ポート1433で実行されています(または、上記を実行しているポートに変更します)。
その後、これらのプロパティpriorをsqlsrv_connect()
呼び出しに追加して、接続のトラブルシューティングのために戻ってくるエラーを可能な限り高めることを検討します。
_sqlsrv_configure('WarningsReturnAsErrors', true);
sqlsrv_configure('LogSubsystems', SQLSRV_LOG_SYSTEM_ALL);
sqlsrv_configure('LogSeverity', SQLSRV_LOG_SEVERITY_ALL);
_
それがSQLサーバーからより有用なものを直接見つけるかどうかを確認してください。
ファイル書き込みのトラブルシューティング
fopen
を確認する必要があります-a
の代わりにw
モードを使用して、ファイルを開くときにファイルが切り捨てられないようにすることができます$myfile3
_が ドキュメント に従ってfalse
であるかどうかを確認する必要があります。E_WARNING
_を生成する必要があります(_error_reporting
_設定が_E_ALL
_に設定されているため、ページに表示されますが、PHP error logfile)。 _file_exists
_ および is_readable()
を使用して権限を確認することもできます。log.txt
_ではありません)PHPのトラブルシューティング
Microsoft documentation をご覧になり、ご使用のバージョンのWindowsで使用している正しいPHP7 dllとDLLが一致することを確認してください。ただし、v4.0のオペレーティングシステム要件は指定されていませんドライバー:彼らはmay Windows Server 2008をサポートしていませんが、私は驚くでしょう。また、接続をサポートしているSQLサーバーのバージョンも表示されないため、古いバージョンのSQLサーバーを使用している場合も問題になる可能性があります。
ドキュメントから、これはより多くの情報を提供します: http://php.net/manual/en/function.sqlsrv-connect.php
$connectionInfo = array( "Database"=>"dbName");
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn ) {
echo "Connection established.<br />";
}else{
echo "Connection could not be established.<br />";
die( print_r( sqlsrv_errors(), true));
}
それがあなたにエラーを与えないなら、おそらくあなたは許可のためにファイルに書き込めないでしょうか?
別の方法として、 PDO_SQLSRV
代わりにドライバー。これは、Windows認証を使用してSQL-Serverに接続する例です。
$serverName = "(local)\sqlexpress";
/* Connect using Windows Authentication. */
try
{
$conn = new PDO( "sqlsrv:server=$serverName ; Database=database_name", "", "");
$conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
}
catch(Exception $e)
{
die( print_r( $e->getMessage() ) );
}
詳細については、をご覧ください