PHP Conference Japan 2024

odbc_prepare

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

odbc_prepare准备执行语句

描述

odbc_prepare(Odbc\Connection $odbc, string $query): Odbc\Result|false

准备执行语句。ODBC 结果对象稍后可用于使用 odbc_execute() 执行语句。

一些数据库(例如 IBM DB2、MS SQL Server 和 Oracle)支持接受 ODBC 规范定义的 IN、INOUT 和 OUT 类型参数的存储过程。但是,统一 ODBC 驱动程序目前仅支持对存储过程使用 IN 类型参数。

参数

odbc

ODBC 连接对象,详情请参见 odbc_connect()

query

要准备的查询字符串语句。

返回值

如果 SQL 命令成功准备,则返回 ODBC 结果对象。错误时返回 false

变更日志

版本 描述
8.4.0 odbc 现在需要一个 Odbc\Connection 实例;以前需要一个 resource
8.4.0 此函数现在返回一个 Odbc\Result 实例;以前返回一个 resource

范例

示例 #1 odbc_execute()odbc_prepare() 示例

在以下代码中,只有当 myproc 的所有三个参数都是 IN 参数时,$success 才为 true

<?php
$a
= 1;
$b = 2;
$c = 3;
$stmt = odbc_prepare($conn, 'CALL myproc(?,?,?)');
$success = odbc_execute($stmt, array($a, $b, $c));
?>

如果您需要使用 INOUT 或 OUT 参数调用存储过程,建议的解决方法是使用数据库的本机扩展(例如,对于 Oracle 使用 oci8)。

参见

添加注释

用户贡献的笔记 4 条笔记

bslorence
17 年前
只是我,还是上面的代码具有误导性?它看起来像 odbc_execute() 返回一个合适的资源,例如,传递给 odbc_fetch_* 函数。

事实上,odbc_execute() 返回一个布尔值,它只指示成功 (TRUE) 或失败 (FALSE)。传递给 odbc_fetch_* 的变量与传递给 odbc_execute() 的变量相同。

<?php
$res
= odbc_prepare($db_conn, $query_string);
if(!
$res) die("could not prepare statement ".$query_string);

if(
odbc_execute($res, $parameters)) {
$row = odbc_fetch_array($res);
} else {
// 处理错误
}
?>
lzsiga at freemail dot c3 dot hu
5 年前
odbc_prepare 返回的资源可以使用 odbc_free_result 释放。
info dot codesquare at gmail dot com
9 个月前
经过两天终于得到一个可工作的代码
(通过 ODBC 使用参数的 SQL SERVER 存储过程)

存储过程

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [dbo].[sp_prev_frm_prev2]
@id int,
@cli nchar(20)
AS
BEGIN
SET NOCOUNT ON;
--SELECT 1
END

PHP

$stmt=odbc_prepare($conn,'{call db.dbo.sp_prev_frm_prev2(?,?)}');

$params=array(1,"clie");

$result = odbc_execute($stmt, $params);
Marek
19 年前
将此示例用于 IBM DB/2

$q = "update TABLE set PASS=? where NAME=?";
$res = odbc_prepare ($con, $q);

$a = "secret"; $b="user";
$exc = odbc_execute($res, array($a, $b));
To Top