2024 年日本 PHP 研討會

odbc_prepare

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

odbc_prepare準備要執行的陳述式

說明

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

準備要執行的 SQL 陳述式。ODBC 結果物件之後可以用於搭配 odbc_execute() 執行該陳述式。

一些資料庫(例如 IBM DB2、MS SQL Server 和 Oracle)支援 ODBC 規範定義的 IN、INOUT 和 OUT 類型參數的預存程序。然而,Unified ODBC 驅動程式目前僅支援預存程序的 IN 類型參數。

參數

odbc

ODBC 連線物件,詳情請參閱 odbc_connect()

query

要準備的查詢字串陳述式。

返回值

如果 SQL 命令已成功準備,則返回 ODBC 結果物件。若發生錯誤,則返回 false

更新日誌

版本 說明
8.4.0 odbc 現在需要 Odbc\Connection 實例;先前需要的是 資源
8.4.0 此函式現在返回 Odbc\Result 實例;先前返回的是 資源

範例

範例 #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_prepare 返回的資源可以用 odbc_free_result 釋放。
info dot codesquare at gmail dot com
9 個月前
經過 2 天,終於得到一個可行的程式碼
(透過 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