odbc_connect

(PHP 4, PHP 5, PHP 7, PHP 8)

odbc_connect连接到数据源

说明

odbc_connect(
    字符串 $dsn,
    字符串 $user,
    字符串 $password,
    整数 $cursor_option = SQL_CUR_USE_DRIVER
): 资源|false

此函数返回的连接 ID 需要其他 ODBC 函数使用。只要连接使用不同的数据库或不同的凭据,您就可以同时打开多个连接。

对于某些 ODBC 驱动程序,执行复杂的存储过程可能会失败,并出现类似以下错误:“无法在包含单个 SELECT 语句以外语句的存储过程中打开游标”。使用 SQL_CUR_USE_ODBC 可能会避免此错误。此外,某些驱动程序不支持 odbc_fetch_row() 中的可选 row_number 参数。SQL_CUR_USE_ODBC 也可能在这种情况下有所帮助。

参数

dsn

连接的数据库源名称。或者,可以使用无 DSN 连接字符串。

user

用户名。

password

密码。

cursor_option

这设置了将为此连接使用的游标类型。此参数通常不需要,但在解决某些 ODBC 驱动程序的问题时可能有用。

以下常量定义了游标类型

  • SQL_CUR_USE_IF_NEEDED
  • SQL_CUR_USE_ODBC
  • SQL_CUR_USE_DRIVER

返回值

返回 ODBC 连接,或在失败时返回 false

示例

示例 #1 无 DSN 连接

<?php
// 使用 SQL Native Client 10.0 ODBC 驱动程序的 Microsoft SQL Server - 允许连接到 SQL 7、2000、2005 和 2008
$connection = odbc_connect("Driver={SQL Server Native Client 10.0};Server=$server;Database=$database;", $user, $password);

// Microsoft Access
$connection = odbc_connect("Driver={Microsoft Access Driver (*.mdb)};Dbq=$mdbFilename", $user, $password);

// Microsoft Excel
$excelFile = realpath('C:/ExcelData.xls');
$excelDir = dirname($excelFile);
$connection = odbc_connect("Driver={Microsoft Excel Driver (*.xls)};DriverId=790;Dbq=$excelFile;DefaultDir=$excelDir" , '', '');
?>

参见

添加备注

用户贡献的备注 36 备注

15
fr at freedom2ct dot com
5 年前
在 Windows 下,odbc_connect(以及 PDO ODBC)显然使用 Windows 本地化来处理来自例如 MS Access 和 MS SQL Server 数据库的输入和输出。

如果使用非 ASCII 字符,这会导致很多麻烦。

我发现 utf8_encode 和 mb_convert 这样的解决方法都失败了。

我发现有效的解决方案是对 Windows 进行以下更改

控制面板 > 地区 > 管理 > 更改系统区域设置
>选中“<i>对全球语言支持使用 Unicode UTF-8.</i>”。
5
nunya at damn dot biz
4 年前
关于 odbc_pconnect 以及可能的其他 pconnect 变体的另一个补充说明

如果连接遇到错误(错误的 SQL、不正确的请求等),该错误将返回并在该连接的后续所有操作中存在,即使后续操作没有导致另一个错误。

例如

脚本使用 odbc_pconnect 连接。
连接在首次使用时创建。
脚本调用查询“Select * FROM Table1”。
Table1 不存在,odbc_errormsg 包含该错误。

稍后(可能是几天后),使用相同的 odbc_pconnect 参数调用不同的脚本。
连接已经存在,因此它被重用。
脚本调用查询“Select * FROM Table0”。
查询运行正常,但 odbc_errormsg 仍然返回关于 Table1 不存在的错误。

我还没有看到使用 odbc_ 函数清除该错误的方法,因此请注意这个陷阱,或者改用 odbc_connect。
4
webmaster at dzconnexion dot com
19 年前
关于 Grisu 于 2003 年 12 月 23 日 11:51 发布的关于通过 ODBC 连接到网络上的 MS-Access 数据库的备注,

请不要忘记在设置注册表项时按如下所示添加双斜杠

"\\\\Server\\folder\\database.mdb"

...
2
Mahmoud at iastate dot edu
22 年前
WINNT 4 工作站,PHP4

当我尝试连接到 MSaccess DSN(Microsoft Jet 引擎无法打开数据库“Unknow”。另一个用户正在独占使用它,或者您没有权限使用它)时,odbc_connect() 一直给我奇怪的错误。

在困惑了一段时间后,我意识到我的数据库名称中包含空格(course surveys.mdb),我缩短了名称以消除空格……一切都正常运行。
3
lffranco at dco.pemex.com
20 年前
与往常一样,微软一无所知……我一直试图通过 ODBC 连接到网络上的 W2K 上的 Access 数据库(不是本地文件,而是映射到 V: 驱动器上)。

我得到的信息是
警告:SQL 错误:[Microsoft][ODBC Microsoft Access 驱动程序] ‘(未知)’ 不是有效的路径。请确保路径名称拼写正确,并且您已连接到文件所在的服务器,SQL 状态 S1009 在 SQLConnect 中,位于 d:\apache\cm\creaart.php 的第 13 行。

所以……我开始到处寻找,看起来 ODBC 驱动程序存在一些严重问题

1. 它无法通过映射的驱动器访问 Access 数据库。对于任何应用程序来说都是这样,无论是 PHP、Coldfusion 还是其他。
2. 您无法使用 UNC(\\Server\resource)创建系统 DSN,因此您必须映射驱动器

很可爱,不是吗?

所以……我放弃了 ODBC,转而使用 ADO,这是有效的代码

=== 代码 ===

$db = '\\\\server\\resource\\db.mdb';
$conn = new COM('ADODB.Connection');
$conn->Open("DRIVER={Driver do Microsoft Access (*.mdb)}; DBQ=$db");

// Driver do Microsoft Access (*.mdb)
// 必须是您在 ODBC 驱动程序中获得的名称。
// 来自数据源 (ODBC)。
// 在这种情况下,我在墨西哥,但驱动程序名称是葡萄牙语,感谢微软。

$sql = 'SELECT username FROM tblUsuarios';
$res = $conn->Execute($sql);
while (!$res->EOF)
{
print $res->Fields['username']->Value . "<br>";
$res->MoveNext();
}

$res->Close();
$conn->Close();
$res = null;
$conn = null;

=== /代码 ===
-1
Shyam Hazari
14 年前
这是我在 Ubuntu 上使用 mysql 成功连接 odbc_connect 的方法。我花了一段时间才弄明白这一点。

使用 apt-get 安装了以下软件包。

apache2
apache2-mpm-prefork
apache2-utils
apache2.2-common
libapache2-mod-php5
libdbd-mysql-perl
libmyodbc
libmysqlclient15off
mysql-client-5.0
mysql-common
mysql-server-5.0
mysql-server-core-5.0
odbcinst1debian1
php5
php5-cli
php5-common
php5-odbc
unixodbc

/etc/odbc.ini
------------
myodbc3 = MySQL ODBC 3.51 驱动程序

[myodbc3]
Driver = /usr/lib/odbc/libmyodbc.so
Description = MySQL ODBC 3.51 驱动程序
Server = localhost
Port = 3306
User = shyam
Password = mypass
Database = mysql
Option = 3
Socket = /var/run/mysqld/mysqld.sock

/etc/odbcinst.ini
----------------
[MySQL ODBC 3.51 驱动程序]
Description = MySQL 驱动程序
Driver = /usr/lib/odbc/libmyodbc.so
Setup = /usr/lib/odbc/libodbcmyS.so
CPTimeout =
CPReuse =
UsageCount = 1

我的 PHP 脚本
------------

<html>
<body>
<?
$conn = odbc_connect("DRIVER={MySQL ODBC 3.51 Driver};Server=localhost;Database=mysql", "shyam", "mypass");

$sql = "SELECT user from user";
$rs = odbc_exec($conn,$sql);
echo "<table><tr>";
echo "<th>用户名</th></tr>";
while (odbc_fetch_row($rs))
{
$user = odbc_result($rs,"user");
echo "<tr><td>$user</td></tr>";
}
odbc_close($conn);
echo "</table>";
?>

</body>
</html>
-2
simonr at no2sp at m dot cogapp dot com
20 年前
要使用 ODBC 通过 DSN 无连接方式连接到 MS-SQL

<?php

$connection_string
= 'DRIVER={SQL Server};SERVER=<servername>;DATABASE=<databasename>';

$user = 'username';
$pass = 'password';

$connection = odbc_connect( $connection_string, $user, $pass );

?>

servername 是数据库服务器的名称

databasename 是数据库的名称

注意,我只在使用 Microsoft ODBC 驱动程序的 Windows 计算机上尝试过此操作。
-2
drew at pixelburn dot net
15 年前
[Microsoft][ODBC Driver Manager] 未找到数据源名称,且未指定默认驱动程序

如果你在 Windows 的 64 位版本(例如 Server 2008)上不断遇到此问题,而其他解决方案都没有帮助。

在 64 位 Windows 服务器操作系统中,有两个 ODBC 管理器。当你打开 ODBC/DSN 系统的常规菜单时,它是针对 64 位 ODBC 管理器的,32 位应用程序(VB 6.0、PHP 5)将无法使用这些 DSN。

这是 32 位 ODBC 管理器所在的位置

C:\Windows\SysWOW64\odbcad32.exe
-1
cs at coolspot dot de
23 年前
我们努力尝试从 PHP 连接到我们的 IBM DB2 RS/6000 服务器。在使用 --ibm-db2= 选项编译后,它可以工作,但这令人难以置信
缓慢。

不,只是测试一些选项,我们发现它从非常慢(获取 100 条记录需要 1 到 10 秒)变成了快速访问(几乎与从 Servlet 使用 JDBC 相同的速度)到 0.2 到 0.3 秒。

我们只是在 odbc_connect 中添加了可选参数 Cursortype,并且使用 Cursortype SQL_CUR_USE_ODBC 改变了这种方式!

希望这能帮助任何必须连接到 db2 的人;)
-2
lomaky at yahoo dot com
22 年前
// 简单连接


$cnx = odbc_connect('cliente','Administrador','');
// 查询
$SQL_Exec_String = "select * from Clientes";
// 执行查询
$cur= odbc_exec( $cnx, $SQL_Exec_String );
echo "<table border=1><tr><th>Dni</th><th>Nombre</th>".
"<th>codigo</th><th>ciudad</th></tr>\n";
while( odbc_fetch_row( $cur ) ) {
$Dni= odbc_result( $cur, 1 );
$Nombre= odbc_result( $cur, 2 );
$codigo= odbc_result( $cur, 3 );
$ciudad= odbc_result( $cur, 4 );
echo "<tr><td>$Dni</td><td>$Nombre</td>".
"<td>$codigo</td><td>$ciudad</td></tr>\n";
}
echo "</table>";
-5
harald dot angel at gmail dot com
17 年前
- Windows - 操作系统
- Apache
- 到网络共享上的 MS-Access 数据库的 ODBC 连接
- 网络共享

经过数小时的搜索,以下是它如何工作的

- 映射 mdb 所在的网络驱动器
- 在控制面板中使用映射的驱动器设置系统 DSN
- 在以下位置打开注册表
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC_INI
- 例如将 "M:\" 编辑为 "\\server\..."
- 关闭 Regedit
- Apache 服务必须使用域(网络)用户运行!
- 之后,你可以使用以下命令连接

$conn = odbc_connect('your-dsn-name','','');

希望这能让人开心;)
再见
-3
Anonymous
15 年前
这对有些人来说可能是显而易见的,但如果你在 Linux 中使用 FreeTDS,这里有一个快速提示,可以为你节省一些时间

确保你的 freetds.conf 中包含这两行
dump file = /tmp/freetds.log
dump file append = yes

这样你就可以在后台使用 tail -f 调试问题。这帮助我在 CentOS Linux 上找到了我的问题

1) tsql 测试有效
2) isql 测试有效
3) 当从 SHELL 运行时,PHP 中的 ODBC 连接也有效
4) 通过 apache 运行 PHP 无法正常工作。

我的 /tmp/freetds.log 文件告诉我
net.c:168:Connecting to MYDBSERVER port MYDBPORT
net.c:237:tds_open_socket: MYDBSERVER:MYDBPORT: Permission denied

答案是我的防火墙/SELinux 拒绝 Apache 进程访问远程 MSSQL 数据库端口,但我的 Shell 帐户没问题。
-3
aamaral at 0kbps dot net
19 年前
关于 ODBC 连接到网络 Sybase SQL Anywhere 8 服务器的两个补充说明。

我使用 PHP5 CLI 二进制文件编写了一个脚本,该脚本监视目录的变化,然后在检测到变化时更新网络服务器 SQL Anywhere 8 数据库。理想情况下,我的程序会无限期地运行,并在适当的时候发出 odbc_connect()/odbc_close()。但是,似乎一旦连接,你的 ODBC 会话就被限制为 30 秒的活动时间,之后,连接会失效,并且无法执行更多查询。相反,它会从 ODBC 驱动程序返回一个通用的“身份验证违规”错误。

以下是一个示例

<?php
$conn
=odbc_connect($connect_string,'','');
$result=odbc_exec($qry,$conn); // 返回数据
sleep(31);
$result=odbc_exec($qry,$conn); //"身份验证违规"
?>

此外,似乎 odbc_close() 并没有真正关闭连接(至少在使用网络 SQL Anywhere 8 时不是这样)。在发出 odbc_close() 后,资源不再可用,但就服务器而言,仍然存在连接。连接只有在 PHP 脚本结束后才会真正关闭,这很不幸,因为随后的 odbc_connect() 命令似乎会重用现有的失效连接,而该连接应该已经关闭。

我的解决方法是,在数据库更新完成后,我的脚本完全退出。然后,我在批处理文件中调用我的脚本,并将其放入一个无限循环中。

我不确定这是 PHP 的 bug 还是什么,但我认为我会分享,以防其他人也在尝试解决这个问题时抓狂…
-5
Abhinav
12 年前
请确保 MSAccess 数据库格式为 ".mdb"。
如果它是 ".accdb",它将无法工作!
-4
ewilde aht bsmdevelopment dawt com
14 年前
一旦你设置了与 Informix 的 UnixODBC 连接(如其他地方所述,例如在 http://www.unixodbc.org/ 中),以下 PHP 代码将通过其 DSN 访问数据库

<?php
// 我们必须为 Informix 设置这些环境变量才能使其工作。要么
// 在这里做,要么在 php.ini 中做。
putenv("INFORMIXDIR=/usr/share/informix");
putenv("ODBCINI=/usr/local/unixODBC/etc/odbc.ini");

// 打开与数据库的连接。
if (!($con = odbc_connect("CollectOh", "", "")))
echo
"<p>连接到 CollectOh 失败。</p>\n";
else
{
// 让我们尝试枚举数据库中的所有表(这里没有 "show tables")。
if (($res = odbc_exec($con, "select * from SYSTABLES")))
{
echo
"<p>\n";
odbc_result_all($res);
echo
"</p>\n";
}

// 像好狗一样关店。
odbc_close($con);
}
?>
-5
Grisu
20 年前
通过 ODBC 连接到网络上的 MS-Access 数据库

在 Windows XP Pro 上运行的 Apache 2.0.47 与 PHP 4.3.4

如果你遇到以下错误
"[Microsoft][ODBC Driver Manager] 未找到数据源名称,且未指定默认驱动程序,SQL 状态 IM002 在 SQLConnect 中"

你应该确保已完成以下操作

ODBC 连接必须是系统 DNS,而不是用户 DNS。配置你的 ODBC 连接,然后使用 regedt32 修改你的配置。转到 HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC_INI 并打开你的 ODBC 连接。DBQ 字段包含数据库的路径。此路径必须没有驱动器名称(例如 "M:"),因此将其更改为 "\\Server\folder\database.mdb"。每次使用 Windows 工具修改 ODBC 配置时,都会更改此设置,因此请确保在之后执行此操作。

然后,转到系统管理中的服务部分。选择 Apache 模块的属性。在登录部分,你必须确保使用网络服务器的有效用户帐户登录。

请注意,使用这种方法您仍然无法访问链接数据库中的链接表。

有趣的是,在 Win98 上,所有这些都是不必要的。
-8
Luis [from] redcodestudio [dot] com
9 年前
在 simonr at no2sp at m dot cogapp dot com 的贡献后(谢谢),我尝试通过创建无 DSN 连接使用 ODBC 连接到本地 MS SQL Server 2014 Express 数据库。它成功了,以下是代码。

<?php
// 将这些变量的值替换为您自己的数据
$user = 'username';
$pass = 'password';
$server = 'serverName\instanceName';
$database = 'database';

// 从现在开始无需更改
$connection_string = "DRIVER={SQL Server};SERVER=$server;DATABASE=$database";
$conn = odbc_connect($connection_string,$user,$pass);

if (
$conn) {
echo
"连接已建立.";
} else{
die(
"无法建立连接.");
}
?>
-5
aamaral at 0kbps dot net
19 年前
要在 Windows 上连接到 Sybase SQL Server Anywhere 8.0,请使用以下方法

<?php
//================================================================

// 配置连接参数
$db_host = "server.mynetwork";
$db_server_name = "Dev_Server";
$db_name = "Dev_Data";
$db_file = 'c:\dbstorage\dev.db';
$db_conn_name = "php_script";
$db_user = "dbuser";
$db_pass = "dbpass";

//================================================================
$connect_string = "Driver={Adaptive Server Anywhere 8.0};".
"CommLinks=tcpip(Host=$db_host);".
"ServerName=$db_server_name;".
"DatabaseName=$db_name;".
"DatabaseFile=$db_file;".
"ConnectionName=$db_conn_name;".
"uid=$db_user;pwd=$db_pass";

// 连接到数据库
$conn = odbc_connect($connect_string,'','');

// 查询
$qry = "SELECT * FROM my_table";

// 获取结果
$result = odbc_exec($conn,$qry);

// 从结果中获取数据
while ($data[] = odbc_fetch_array($result));

// 释放结果
odbc_free_result($result);

// 关闭连接
odbc_close($conn);

// 显示数据
print_r($data);

//================================================================
?>
-3
phobo_AT_paradise.net.nz
23 年前
如果您使用 Openlink 连接到 Microsoft Access 数据库,您可能会发现 odbd_connect() 工作正常,但发现任何查询都会产生奇怪的结果;SELECT 查询失败,显示“[OpenLink][ODBC][Driver]驱动程序功能不足,SQL 状态
S1C00 在 xxxx.php 的 SQLExecDirect 中,第 xx 行",而 INSERT/DELETE 查询警告“在此结果索引处没有元组”。

在这种情况下,请使用 SQL_CUR_USE_ODBC 游标!

这让我困惑了很长时间;因为似乎是 odbc_exec() 出错了... :)

Siggy
-2
aurelien marchand
19 年前
我花了三天时间才能够通过 Mandrake 上的 ODBC 和 PHP 将我们的 Linux 内联网服务器连接到我们的 AS400 数据库。我安装了我认为应该能用的所有东西,但我仍然得到:odbc_connect(): SQL 错误:调用 CC_connect 时缺少服务器名称、端口或数据库名称,SQL 状态 IM002 在 SQLConnect 中

请注意,isql 工作正常,但 php 连接失败。

解决方案
我找到了一个名为 php-unixODBC(与 php-odbc 相反)的 PHP 模块。安装后(尽管不是针对正确版本的 PHP),我意识到它没有正确放置文件。ini 文件位于 /etc/php/ 而不是 /etc/php.d/,因此我将其移动到那里,并将旧的 /etc/php.d/36_odbc.ini 重命名为 /etc/php.d/36_odbc.ini.sav,因此现在我有 /etc/php.d/36_unixodbc.ini。我重新启动了 httpd 服务器,现在我可以访问 as400 了。

如果您有任何问题,请发送电子邮件至 _artaxerxes2_at_iname_dot_com(不带下划线)。
-2
SilencerX at optidynamic dot com
23 年前
如果您像我一样从 Unix 使用 Openlink 访问 NT/Win2k 机器上的 MS Access 数据库,发现您的 INSERT 查询没有执行任何操作并且没有报告任何错误,请使用 odbc_pconnect()。

我无法理解发生了什么,经过一番研究后,我发现对于 MySQL,他们建议对 INSERT 查询使用 mysql_pconnect()。我用 odbc 尝试了同样的方法,它成功了。
-7
manuel dot vecino at steria dot es
19 年前
嗨,Mario,我修改了你的脚本以适应我的配置,
我还添加了一些行来关闭连接。
谢谢你的脚本
我运行的是 apache 2.0.52 和 PHP 5.0.2。Windows 2000
SQL 2000

<head>
<title>无标题文档</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body bgcolor="#FFFFFF">
<table width="75%" border="1" cellspacing="1" cellpadding="1" bgcolor="#FFFFFF">
<tr bgcolor="#CCFFFF">
<td height="22"><b>类型</b></td>
<td height="22"><b>品牌</b></td>
<td height="22"><b>型号</b></td>
</tr>

<?php
$cx
=odbc_pconnect("RAMPANT","Invent","pass","");
$cur=odbc_exec($cx,"select tipo,marca,modelo from inv_equipos");
while(
odbc_fetch_row($cur))
{
// 收集结果
$tipo=odbc_result($cur,1);
$marca=odbc_result($cur,2);
$modelo=odbc_result($cur,3);
// 格式化并显示结果
print ("<tr>");
print (
"<td>$tipo</td>");
print (
"<td>$marca</td>");
print (
"<td>$modelo</td>");
print (
"</tr>");
}

// 断开数据库连接
odbc_close($cx);

?>


</table>
</body>
</html>
-8
Matt
8 年前
在较新的版本中,您可能需要:odbc_connect("Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=C:/Folder/database.mdb", "", "");
-4
atze at o2o dot com dot au
20 年前
要通过 odbc 连接到 unix srv 上的 SQL DB,可以使用以下解决方案之一。

1. 拥有一个 odbc.ini (~/.odbc.ini)

[PostgreSQL]
Description = PostgreSQL 模板 1
Driver = PostgreSQL
Trace = Yes
TraceFile = /tmp/odbc.log
Database = PerfTest
Servername = localhost
UserName = boss
Password = BigBoss
Port = 5432
Protocol = 6.4
ReadOnly = Yes
ConnSettings =

[Default]
Driver = /local/lib/libodbc.so

2. 指定一个 DSN

function DBCALL($SQL)
{
$U = "boss";
$DB = "PerfTest";
$P = "BigBoss";
$Srv = "llocalhost";
$DSN = "Driver=PostgreSQL;Server=$Srv;Database=$DB";

echo "尝试连接到 $DSN\n";
if ($CID = odbc_connect ("$DSN","$U","$P",SQL_CUR_USE_ODBC))
{
echo "仍然尝试 CID = $CID\n";
if ($RES = odbc_exec($CID, $SQL))
{
echo "RES = $RES\n";
print_r($RES);
echo "\n";

$NR = odbc_num_rows($RES);

<snip>

希望这有帮助。
-3
Ceeclipse
16 年前
"返回 ODBC 连接 ID 或 0(FALSE)表示错误。"

请记住,PHP5 中的以下代码将无法正常工作

<?php

if( odbc_connect("test", "test", "test") === false ) {
// 您的错误报告/处理在此处..
}

?>

odbc_connect() 返回一个整数,而不是 PHP5 布尔值!
-3
osiris at rich-howard dot co dot uk
22 年前
我想在这里添加一个关于此的说明。我在 Windows XP 上使用的是 Apache 2.0.39 和 PHP 4.2.2。

如果您在 dsn 字符串中不使用大写字母,将非常有帮助。

我也想对关于使用系统 DSN 而不是文件 DSN 的帖子发表一些评论。有很多帖子说使用系统而不是文件,但没有一个 (我所看到的) 解释原因。

本质上:文件 DSN 是特定于当前用户的,因此互联网访客用户帐户没有对它们的权限。系统对每个人都可用。

此致

奥西里斯 :)
-5
匿名
16 年前
我在我的 Ubuntu 机器上使用 mdbtools 访问 .mdb 文件,作为 ODBC 驱动程序 (和 PHP)
它的功能很少,实际上不可用。
-5
rotwhiler at hotmail dot com
19 年前
对于在他们的 MS Access ODBC 请求中遇到 WHERE 子句问题的人,我发现:发送到 Access 的 SQL 请求必须在条件周围包含引号。

$sel = "SELECT * FROM table1 WHERE cust_id = 'cust1'";
输出
SELECT * FROM table1 WHERE cust_id = 'cust1'
并且工作。

$sel = ?SELECT * FROM table1 WHERE cust_id = cust1?;
输出
SELECT * FROM table1 WHERE cust_id = cust1
并且不起作用。

以下是完整的代码块
$conn = odbc_connect("database1","","");
$sel = "SELECT * FROM table1 WHERE cust_id = 'cust1'";
$exec = odbc_exec($conn,$sel);
while($row = (odbc_fetch_array($exec)))
$serv[odbc_result($exec,'label')] = $row;
print_r($serv);
-5
cnewbill at onewest dot net
24 年前
很多人在 Linux 上遇到同样的问题。我两天前被分配了这个问题,并且我成功了。我的组合是 PHP4 RC2、Easysoft OOB 和 unixODBC。这三款产品一起工作得非常好,而且安装非常容易。更多信息 http://www.easysoft.com/products/oob/main.phtml. ps 也很好地与 Perl 的 DBI 协作。
-4
jeremy at austin.ibm.com
21 年前
这里有一个关于使用 php 和 db2 的快速说明,它花了我几个小时和几次重新编译来弄清楚为什么它不起作用。

在任何脚本中添加以下行

putenv("DB2INSTANCE=db2inst1");

或者,以某种方式在您的 Web 服务器环境中设置它。
-6
root at mediamonks dot net
22 年前
由于多次请求,更多的是针对无 DSN 连接

<?php
$db_connection
= new COM("ADODB.Connection");

$db_connstr = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=". realpath("../databases/database.mdb") ." ;DefaultDir=". realpath("../databases");
$db_connection->open($db_connstr);
$rs = $db_connection->execute("SELECT * FROM Table");
$rs_fld0 = $rs->Fields(0);
$rs_fld1 = $rs->Fields(1);
while (!
$rs->EOF) {
print
"$rs_fld0->value $rs_fld1->value\n";
$rs->MoveNext(); /* updates fields! */
}
$rs->Close();
$db_connection->Close();
?>

(打印每行前两列。)
-5
cjbauer2 at hotmail dot com
9 年前
/* 使用 PHP 连接到 Microsoft Access
$conn = odbc_connect("Driver={Microsoft Access Driver (*.mdb)};
Dbq=$mdb_Filename", $user, $password);

这在 Windows 服务器上不起作用。
相反,它需要
$conn->Open("Provider=Microsoft,.Jet.OLEDB.4.0; Data Source=......

将变量 $mdb_Filename 指向...
Data Source=C:\inetpub\wwwroot\php\mdb_Filename
或者虚拟目录指向的位置。
-5
fc99 at smm dot de
23 年前
如果您不想在 Web 服务器上指定您的登录凭据,您可以将登录字段留空以使用集成的 Windows 安全性,如下所示

odbc_connect("DSN=DataSource","","");

确保您也已将系统 DSN 切换到集成安全性!

(当然,仅适用于 Windows 机器)

弗洛。
-4
sven dot delmeiren at cac dot be
18 年前
您好,

有关如何在 Linux 上使用 Merant ODBC 驱动程序连接到 Progress 数据库的说明,请访问 http://www.progteg.com/english/documents.html.

此致,

斯文·德尔梅伦
计算机与通信 NV
-4
gekkeprutser at gmail dot com
18 年前
我也有这个问题:([ODBC SQL Server 驱动程序]分配 Sybase Open Client 上下文失败)。该消息仅在服务器运行了几个小时后出现,因此我预计资源匮乏。但是,这是一个设置问题,我认为这可能对其他人也有帮助。

除了像 oottavi 上面描述的那样放置一个 <?php putenv ("SYBASE=c:\sybase"); ?> 之外,我还必须通过设置 <?php putenv ("LC_ALL=default"); ?> 来指定语言环境。

即使我的语言环境已经设置为有效的语言环境 (en_US),我仍然必须设置此环境变量才能使其正常工作。
-6
Ray.Paseur sometimes uses GMail
17 年前
要连接到 Microsoft Access 数据库并显示其中的表 (在 *.asp 页面中创建)...

$dbq = str_replace("/", "\\", $_SERVER["DOCUMENT_ROOT"]) . "\\path\\to\\database.mdb";
if (!file_exists($dbq)) { echo "Crap!<br />No such file as $dbq"; }

$db_connection = odbc_connect("DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=$dbq", "ADODB.Connection", "password", "SQL_CUR_USE_ODBC");

$result = odbc_tables($db_connection);

while (odbc_fetch_row($result)) {
if(odbc_result($result,"TABLE_TYPE")=="TABLE") {
echo "<br />" . odbc_result($result,"TABLE_NAME");
}
}
To Top