针对 Holger 关于使用 @@identity 的评论
小心。如果您要插入的表具有一个触发器,该触发器也插入到另一个具有标识列的表中,您将获得另一个表的键!使用 scope_identity() 而不是 @@identity
针对 Holger 关于使用 @@identity 的评论
小心。如果您要插入的表具有一个触发器,该触发器也插入到另一个具有标识列的表中,您将获得另一个表的键!使用 scope_identity() 而不是 @@identity
我发现这是 7.5.00 版 MaxDB 特殊驱动程序的完美替代方案。在 *nix 上安装起来并不容易。Windows 看起来不错。无论如何,ODBC 是将 SAPDB/MaxDB 连接到 PHP 的完美替代方案。
ODBC 替代方案(而不是 MAXDB-php 驱动程序)的安装指南可以在这里找到
http://maxdb.yapabout.com/viewtopic.php?t=21
在我搜索用于检索已插入行的 NewID 的函数时(该行具有自动增量),我找到了这个解决方案,就像 mysql_insert_id 用于与 MS-Access 的 ODBC 连接一样
<?
// 在下面进行连接
$Connection = odbc_connect(...);
$Result = odbc_exec($Connection, "select @@identity");
$NewID = odbc_result($Result, 1);
odbc_free_result($Result);
// 在这里使用 NewID 做任何你想做的事情
odbc_close($Connection);
?>
我认为这对于 MS-SQL-Server 和 Sybase 也应该有效 - 通过 ODBC 和直接 (mssql_.../sybase_...)。
希望对您有帮助……
此致
Holger
我搜索了为什么 Windows + Apache 2.0.X 下的网络远程驱动器的 odbc 连接无法给出查询的解决方案,但似乎没有人提供解决方案。
事实上,这很简单。
转到控制面板 -> 服务;
找到并双击“Apache2”;
在“登录”页面中,选择“以该帐户登录”,并在 Web 服务器系统中提供具有控制网络远程驱动器权限的帐户;
最后,重启 Apache,就是这样。
曾经想知道为什么使用 IBM DB2 Universal Database for Linux、UNIX 和 Windows 时,您的数据检索时间非常慢吗?统一 ODBC 使用的默认游标类型不受 DB2 支持,因此它被降级为仅向前游标——并且每次行提取都会进行协商。
强制您的 PHP 应用程序使用仅向前游标的一种方法是使用方便的 CLI patch2 设置值 6 修改您的 DB2 客户端配置
$ db2 UPDATE CLI CONFIGURATION FOR SECTION dbname USING patch2 6
您必须在运行 PHP 应用程序的同一台机器上更新此客户端设置。这适用于 Windows 操作系统以及 Linux 和 UNIX 操作系统。
我运行了一些基本基准测试(从远程数据库服务器获取包含 3 个 INTEGER 列的 10,000 行),并得出结论,此设置可以极大地提高应用程序速度
没有 CLI patch2 设置:~22 秒
有 CLI patch2 设置:~ 1.75 秒
请注意,使用此 patch 设置(或使用仅向前游标的任何其他方法)的缺点是,对于 SELECT 语句影响的行数,odbc_num_rows() 始终返回“-1”。
如果捆绑的 ODBC 库遇到某些字段格式(例如 Pervasive.SQL 中的某些 REAL),请查看 http://odbtp.sourceforge.net/.
经过多次头痛后,我采用了 odbtp:它是一个非常可靠的库,最重要的是它不依赖于特定的操作系统。
如果您收到错误提示“连接正忙于处理另一个 hstmt 的结果,SQL 状态 S1000 在 SQLExecDirect 中”,请尝试使用 SQL_CURSOR_FORWARD_ONLY 选项打开您的 ODBC 连接。
<?php
$db_link = odbc_connect($dsn, $username, $password, SQL_CURSOR_FORWARD_ONLY)
or die('连接服务器错误。服务器提示:'.htmlspecialchars(odbc_errormsg()));
?>
Windows 64 位系统下 ODBC 的注意事项
我相当肯定,在 Windows 64 位系统上,PHP 只能访问 32 位的 ODBC 组件。因此,您需要通过位于以下路径的数据源管理器配置您的 ODBC DSN:
/WINDOWS/SysWOW64/odbcad32.exe