エラーの修正についてサポートが必要です:SQL state IM014 in SQLConnect
およびSQL state IM002 in SQLConnect
。
同じスクリプトをwebserver/remote/
で実行し、もう1つはローカルマシンから同じデータベースにアクセスしようとしていますが、異なるエラーメッセージが表示されます。
Webサーバーから実行すると、
SQLエラー:[unixODBC] [ドライバーマネージャー]データソース名が見つからず、デフォルトのドライバーが指定されていません。SQL状態のSQL状態IM002
ローカルマシンで実行したときのように
[Microsoft] [ODBC Driver Manager]指定されたDSNには、ドライバーとアプリケーション間のアーキテクチャの不一致が含まれています
PHPスクリプトで次のコードを使用してローカルデータベースに接続しました
$odbc['dsn'] = "SageLine50v19";
$odbc['user'] = "Peac";
$odbc['pass'] = "XXXX";
$mysql['Host'] = "localhost";
$mysql['user'] = "root";
$mysql['pass'] = "";
$mysql['dbname'] = "sagetest";
$mysql['idfield'] = "id";
// Step 1: Connect to the source ODBC database
if ($debug) echo "Connect to " . $odbc['dsn'] . ' as ' . $odbc['user'] . "\n";
$conn = odbc_connect($odbc['dsn'], $odbc['user'], $odbc['pass']);
if (!$conn) {
die("Error connecting to the ODBC database: " . odbc_errormsg());
}
// loop through each table
$allTables = odbc_tables($conn);
$tablesArray = array();
while (odbc_fetch_row($allTables)) {
if (odbc_result($allTables, "TABLE_TYPE") == "TABLE") {
$tablesArray[] = odbc_result($allTables, "TABLE_NAME");
}
}
//print_r($tablesArray); // to list all tables
私のODBC.iniは以下のようになります
[ODBC 32 bit Data Sources]
manager=Sage Line 50 v16 (32 bit)
t=SQL Server Native Client 10.0 (32 bit)
s1=Pervasive ODBC Client Interface (32 bit)
SageLine50v19=Pervasive ODBC Client Interface (32 bit)
[manager]
Driver32=C:\Windows\SysWOW64\S16DBC32.dll
[t]
Driver32=C:\Windows\system32\sqlncli10.dll
[s1]
Driver32=C:\Program Files (x86)\Pervasive Software\PSQL\bin\w3odbcci.dll
[SageLine50v19]
Driver32=C:\Program Files (x86)\Pervasive Software\PSQL\bin\w3odbcci.dll
とてもシンプル!
サーバー上:
SQLエラー:[unixODBC] [ドライバーマネージャー]データソース名が見つからず、デフォルトのドライバーが指定されていません。SQL状態のSQL状態IM002
USERデータソース名を削除し、それをSYSTEMデータソース名として定義します。移動->スタート->設定->コントロールパネル->管理ツール->データソース(ODBC):-ユーザーDSN:指定したユーザーDSNを削除-システムDSN:新しいシステムDSNを作成
または、ローカルにインストールされているものと同じ32ビットまたは64ビットのバージョンをインストールしようとします。
ローカル:
[Microsoft] [ODBC Driver Manager]指定されたDSNには、ドライバーとアプリケーション間のアーキテクチャの不一致が含まれています
32ビット/ 64ビットの競合-32ビットのドライバーバージョンをインストールするか、C:\ Windows\SysWoW64 \で32ビットを使用/構成します
ローカルにインストールされているものと同じ32ビットまたは64ビットのバージョンをインストールしてみてください。
まず、管理ツールオプションを開きます。オペレーティングシステムを確認します。 64ビットを使用している場合は、64ビットのドライバーを選択します。または、32ビットの場合、32ビットを選択します。
ユーザーDSNを作成しないでください。システムDSNを選択します。
例えば名前が「empcon1」のシステムDSNを作成し、PHPコードで次のように記述します。
$dbNewName = "empcon1"; <br/>
$dbUserName = "yash"; <br/>
$dbPassword = "yash";<br/>
$conn=odbc_connect($dbNewName,$dbUserName,$dbPassword);
それですべて..接続されます。
これにはいくつかの原因があります。まず、両方のマシンでDSNを宣言する必要があります。リモートマシンでは、ネットワーク内の場所に応じてWANまたはLANアドレスにする必要があります。次に、DSNを宣言する必要があります。正しいODBCドライバー、32ビットドライバーと64ビットドライバーがあります。MySQLコネクタは両方に付属しています。
32 bit ODBC: %systemdrive%\Windows\SysWoW64\odbcad32.exe
64 bit ODBC: %systemdrive%\Windows\system32\odbcad32.exe
64ビットドライバーを削除し、32ビットドライバーを追加して、それがどのようになるかを確認します。また、ODBC=をテストして、接続していることを確認してください。それ以降は、コーディングを確認してください。
私の場合、他の場所で見つけたコードを使用して、PHPスクリプトをMS Access 2003データベース(.mdbファイル)に接続しようとしていました。
$dbName = "C:\\DB\\myAccessFile.mdb";
if (!file_exists($dbName)) {
die("Could not find database file.");
}
$db = new PDO("odbc:DRIVER={Microsoft Access Driver (*.mdb, *.accdb)}; charset=UTF-8; DBQ=$dbName; Uid=myUserName; Pwd=secret;");
// use the connection here
$result = $db->query('SELECT * FROM tableName');
$counter = 1;
while ($row = $result->fetch()) {
echo $row["firstName"] . " " . $row['lastName'];
echo '<br/>';
$counter = $counter + 1;
if ($counter == 50) {
break;
}
}
// and now we're done; close it
$sth = null;
$dbh = null;
オペレーティングシステム:Windows 10 Pro。
WAMPサーバーのバージョン:3.1.9
次の図に示すように、コードで指定されているドライバーがODBCダイアログボックスのドライバー名と完全に一致していることを確認してください。