未找到数据源名称,并且未指定默认驱动程序

时间:2014-10-10 01:26:00

标签: php sql sql-server odbc

我需要帮助修正错误:SQL state IM014 in SQLConnectSQL state IM002 in SQLConnect

我运行相同的脚本,一个在webserver/remote/上,另一个来自本地机器试图访问同一个数据库,但我收到不同的错误消息。

当我从网络服务器运行时,我得到了

  

SQL错误:[unixODBC] [驱动程序管理器]未找到数据源名称,并且未指定默认驱动程序,SQL中的SQL状态IM002

当我在本地机器上运行时,我得到了

  

[Microsoft] [ODBC驱动程序管理器]指定的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

4 个答案:

答案 0 :(得分:2)

很简单!

在服务器上:

SQL错误:[unixODBC] [驱动程序管理器]未找到数据源名称,并且未指定默认驱动程序,SQL中的SQL状态IM002

删除USER数据源名称并将其定义为SYSTEM数据源名称。 转到 - >开始 - >设置 - >控制面板 - >管理工具 - >  数据源(ODBC):   - 用户DSN:删除指定的用户DSN   - 系统DSN:创建新的系统DSN

否则尝试在本地安装时安装相同的32位或64位版本。

本地:

[Microsoft] [ODBC驱动程序管理器]指定的DSN包含驱动程序和应用程序之间的体系结构不匹配

32位/ 64位冲突 - 要么安装32位驱动程序版本,要么在C:\ Windows \ SysWoW64 \

下使用/配置32位

尝试在本地安装时安装相同的32位或64位版本。

答案 1 :(得分:1)

首先打开管理工具选项。检查您的操作系统。如果您使用的是64位,则选择64位驱动程序。或者它是32位然后选择32位。

请不要让任何用户DSN。选择系统DSN。

e.g。我创建了系统DSN,其名称为“empcon1”,然后在PHP代码中,您应该这样编写:

$dbNewName = "empcon1"; <br/>
$dbUserName = "yash"; <br/>
$dbPassword = "yash";<br/>
$conn=odbc_connect($dbNewName,$dbUserName,$dbPassword);

这就是所有..你会得到连接。

答案 2 :(得分:0)

有一些事情可以导致这种情况。首先,需要在两台计算机上声明DSN,在远程计算机上,它需要是WAN或LAN地址,具体取决于它在网络中的位置。其次,你需要确保你有正确的ODBC驱动程序,有32位驱动程序和64位驱动程序。 MySQL连接器随附两者。

32 bit ODBC: %systemdrive%\Windows\SysWoW64\odbcad32.exe
64 bit ODBC: %systemdrive%\Windows\system32\odbcad32.exe

我会尝试删除64位驱动程序,添加32位驱动程序,看看它是怎么回事。另外,请确保测试ODBC以确保连接。如果你之后再检查编码时间。

答案 3 :(得分:0)

就我而言,我试图使用在其他地方找到的代码将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对话框中的驱动程序名称完全匹配,如下图所示:

enter image description here