Firebird/InterBase 函数

目录

添加备注

用户贡献的备注 6 个备注

interbase at almico dot com
21 年前
如果您使用的是 Apache 的 VirtualHosts,您可能会发现以下指令有用

php_flag magic_quotes_sybase on

在任何 VirtualHost 中使用它,它将在本地设置为该 VirtualHost,而不会干扰任何全局设置。
这是一个示例

<VirtualHost 555.666.777.888>
ServerName www.samplehost.com
DirectoryIndex index.php index.htm
php_flag magic_quotes_sybase on
</VirtualHost>
lars at dybdahl dot net
21 年前
如果不启动事务,则无法使用 interbase/firebird。 似乎事务在脚本结束时不会自动提交或回滚,因此请记住在所有启用了 interbase 的脚本结束时使用 ibase_rollback() 或 ibase_commit()。

更糟糕的是,如果您使用 `ibase_pconnect`(推荐),事务会从一个请求持续到下一个请求。因此,如果您在脚本结束时没有回滚事务,另一个用户的请求可能会继续第一个请求打开的事务。

这有两个含义:
1) 在浏览器中单击刷新不会让您看到更新的数据,因为您仍然在查看来自同一事务的数据。
2) 一些 PHP 脚本可能会偶尔失败,而其他情况下则不会失败,这取决于 Apache 服务器线程以及它们开始使用的事务。

不幸的是,没有像下面这样的功能:
if (ibase_intransaction()) ibase_rollback();

因此,请确保所有脚本都以 `ibase_rollback()` 或 `ibase_commit()` 结束。
felixlee at singnet dot com dot sg
21 年前
以下是如何从 Firebird 中的存储过程中获取结果的示例。
此示例使用 Employee.gdb 中的存储过程和 show_langs 过程。


$host = 'localhost:X:/firebird/examples/Employee.gdb';
$username='SYSDBA';
$password='masterkey';

$dbh = ibase_connect ( $host, $username, $password ) or die ("error in db connect");
$stmt="Select * from SHOW_LANGS('SRep',4,'Italy')";
$query = ibase_prepare($stmt);
$rs=ibase_execute($query);
$row = ibase_fetch_row($rs);

echo $row[0];

/* free result */
ibase_free_query($query);
ibase_free_result($rs);

/* close db */
ibase_close($dbh);
?>
sysop at smartnettechnologies dot com
16 年前
此示例有两个问题,可能是作者写得太快了,首先是使用一个变量定义用户密码,然后使用另一个变量调用它们,其次是在 `;` 后面使用了逗号。

$db = '/path/to/database.gdb';
$user = 'username';
$password = 'password';
$res = ibase_connect($db,$dbuser,$dbpass) or die("<br>" . ibase_errmsg());

// Query
$sql="SELECT * FROM table;"
johan at essay dot org
24 年前
对于在 PHP-Interbase 中从存储过程返回值遇到问题的人,我找到了一个解决方案。使用类似这样的 `select` 语句:
select * from sp_prodecure(param, ...)
但是,重要的是该过程必须包含 `SUSPEND` 语句,否则该过程不会返回任何值。

但是,当您尝试执行过程时遇到的“消息长度”(参见上面的注释)错误应该已修复!
fortega at uamericas dot net
17 年前
这是一个最小的代码示例。确保创建用户和数据库以使其正常工作。

<?php
// 最小代码示例

// 连接
$db = '/path/to/database.gdb';
$user = 'username';
$password = 'password';
$res = ibase_connect($db,$dbuser,$dbpass) or die("<br>" . ibase_errmsg());

// 查询
$sql="SELECT * FROM table;"
$result=ibase_query($res,$sql) or die(ibase_errmsg());
while(
$row=ibase_fetch_object($result)){
// 使用 $row->FIELDNAME 而不是 $row->fieldname
print $row->FIELDNAME;
}
ibase_free_result($result);

// 关闭
ibase_close($res) or die("<br>" . ibase_errmsg());
?>

以下代码可用于在创建表时获取自动递增字段

<?php

// 此函数生成自动递增字段,如 MySQL AUTO_INCREMENT。
function generate_autoincrement($tablename,$primarykey){
// * 生成器
dbexec('CREATE GENERATOR GEN_' . $tablename . '_PK;');
// * 触发器
dbexec('CREATE TRIGGER INC_' . $primarykey . ' FOR ' . $tablename
. chr(13) . 'ACTIVE BEFORE INSERT POSITION 0'
. chr(13) . 'AS'
. chr(13) . 'BEGIN'
. chr(13) . 'IF (NEW.' . $primarykey . ' IS NULL) THEN'
. chr(13) . 'NEW.' . $primarykey . '= GEN_ID(GEN_' . $tablename . '_PK, 1);'
. chr(13) . 'END');
}
?>

用法:<?php generate_autoincrement('table','column name'); ?>
To Top