ibase_query

(PHP 5, PHP 7 < 7.4.0)

ibase_query在 InterBase 数据库上执行查询

说明

ibase_query(resource $link_identifier = ?, string $query, int $bind_args = ?): resource

在 InterBase 数据库上执行查询。

参数

link_identifier

一个 InterBase 连接标识符。如果省略,则假定最后一个打开的连接。

query

一个 InterBase 查询。

bind_args

返回值

如果查询引发错误,则返回 false。如果成功并且存在(可能是空的)结果集(例如使用 SELECT 查询),则返回结果标识符。如果查询成功并且没有结果,则返回 true

注意:

在 PHP 5.0.0 及更高版本中,此函数将返回 INSERT、UPDATE 和 DELETE 语句所影响的行数。为了保持向后兼容性,如果查询成功但没有影响任何行,它将返回 true

错误/异常

如果您在使用此函数后遇到类似“算术异常、数值溢出或字符串截断。无法在字符集之间转换字符”(当您尝试使用带重音的字符时会发生这种情况)的错误,您必须设置字符集(例如 ISO8859_1 或您当前的字符集)。

范例

范例 #1 ibase_query() 例子

<?php

$host
= 'localhost:/path/to/your.gdb';

$dbh = ibase_connect($host, $username, $password);
$stmt = 'SELECT * FROM tblname';

$sth = ibase_query($dbh, $stmt) or die(ibase_errmsg());

?>

参见

添加注释

用户贡献注释 5 个注释

up
4
chrisg at cordell dot com dot au
20 年前
一个简单的函数,用于将 SQL 语句的结果检索到数组中,还将处理 BLOB 字段

<?php
function interbase_sql_exec ($sql) {
$dataArr = array();
$host = "svrname:path\filename.GDB";
$username = "whatever";
$password = "******";
$connection = ibase_connect ($host, $username, $password,'ISO8859_1', '100', '1');
$rid = @ibase_query ($connection, $sql);
if (
$rid===false) errorHandle(ibase_errmsg(),$sql);
$coln = ibase_num_fields($rid);
$blobFields = array();
for (
$i=0; $i < $coln; $i++) {
$col_info = ibase_field_info($rid, $i);
if (
$col_info["type"]=="BLOB") $blobFields[$i] = $col_info["name"];
}
while (
$row = ibase_fetch_row ($rid)) {
foreach (
$blobFields as $field_num=>$field_name) {
$blobid = ibase_blob_open($row[$field_num]);
$row[$field_num] = ibase_blob_get($blobid,102400);
ibase_blob_close($blobid);
}
$dataArr[] = $row;
}
ibase_close ($connection);
return
$dataArr;
}
?>
up
0
coladict at gmail dot com
8 年前
与描述相反,该函数并不总是执行查询,除非您尝试获取结果。我通过以下代码发现了这一点

<?php
$result
= ibase_query($dbh,"SELECT boniid FROM PROC_INS_OBONI_DELIV_ADDBONITM ( ? , ? , ? , ? , null , ? )", $bon_id , $plucode2 , $amount , $note , $discount);
$this->log_add(mb_convert_encoding("SELECT boniid FROM PROC_INS_OBONI_DELIV_ADDBONITM ( " . $bon_id . ", " . $plucode2 . ", " . $amount . ", " . $note . ", " . $nullparent . ", " . $discount . " )",'utf8','cp1251'));

if (!
$result){
$errmsg = ibase_errmsg();
ibase_rollback($dbh);
ibase_close($dbh);

$this->log_add("Item (" . $mid . " - " . $plucode2 . ") : Error returned (" . __LINE__ . ") : " . $errmsg);
return
"Error sending product ( $m_name). Error message: $errmsg";
}

// item data does NOT enter the database if I don't call ibase_fetch_assoc
$row = ibase_fetch_assoc($result);
?>

这个问题可能仅限于 FireBird 1.5,也可能不限于此。无论如何,请谨慎使用。
up
0
escoric at latinmail dot com
19 年前
/* 如果您的工作环境是 Windows */

$link=ibase_connect ($path, $usuario, $password, 'WIN1251');
up
-1
eric_cavalcanti at hotmail dot com
22 年前
使用 BLOB

插入 BLOB

/* 创建 blob */
$blob_id = ibase_blob_create();

/* 填充 blob */
ibase_blob_add($blob_id, $var_datablob);

/* 关闭新的 blob */
$blob_id_str = ibase_blob_close($blob_id);

/* 插入到表中 */
ibase_query("INSERT INTO BLOB_TABLE (ID, BLOB) VALUES (1, ?)",$blob_id_str);

打开 BLOB

/* 查询 */
$set = ibase_query("SELECT BLOB FROM BLOB_TABLE WHERE ID = 1");

/* 获取一行 */
$row = ibase_fetch_object($set);

/* 打开 BLOB 以供读取 */
$blob_id = ibase_blob_open($row->BLOB);

/* 获取 BLOB 数据 */
$stringBLOB = ibase_blob_get($blob_id);

/* 打印 BLOB */
echo $stringBLOB;

/* 关闭新的 blob */
ibase_blob_close($blob_id);

/* 释放结果 */
ibase_free_result($set);
up
-1
SenorTZ senortz at nospam dot yahoo dot com
21 年前
关于在 Interbase 或 Firebird 中查询系统表的两个评论;希望对您有所帮助。

1. 如果你尝试构建一个查询字符串来从系统表(其形式为 "rdb$some_name")中提取数据,你应该使用字符串合并运算符 "." 在你的查询字符串中将 "rdb$some_name" 表名分开。
$query = "select rdb"."$"."relation_name as TABLE_NAME from rdb"."$"."relations where rdb"."$"."system_flag=0";

2. 第二点与你可以使用(在调用 ibase_fetch_object 之后)在查询中为 "rdb$some_name" 表使用的别名作为字段标识符的事实有关。

示例
$get_table_names_query = "select rdb"."$"."relation_name as TABLE_NAME from rdb"."$"."relations where rdb"."$"."system_flag=0";
//
$res_table_names_query = ibase_query($dbconnection, $get_table_names_query);
//
while ($row_table_names = ibase_fetch_object($res_table_names_query))
{
print($row_table_names->TABLE_NAME);//使用的别名
}

编辑说明
使用反斜杠保护 $- 符号会更容易。
例如 "select rdb\$relation_name as TABLE_NAME from ..."
To Top