odbc_prepare

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

odbc_prepare准备语句以供执行

描述

odbc_prepare(资源 $odbc, 字符串 $query): 资源|false

准备语句以供执行。结果标识符可用于稍后使用 odbc_execute() 执行该语句。

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

参数

odbc

ODBC 连接标识符,有关详细信息,请参阅 odbc_connect()

query

正在准备的查询字符串语句。

返回值

如果 SQL 命令已成功准备,则返回 ODBC 结果标识符。如果出错,则返回 false

示例

示例 #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("无法准备语句 ".$query_string);

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

存储过程

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