CascadiaPHP 2024

odbc_prepare

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

odbc_prepareПодготавливает запрос к выполнению

Описание

odbc_prepare(resource $odbc, string $query): resource|false

Подготавливает запрос к выполнению. Идентификатор результата может быть использован позже для выполнения запроса с помощью odbc_execute().

Некоторые базы данных (например, IBM DB2, MS SQL Server и Oracle) поддерживают хранимые процедуры, которые принимают параметры типа IN, INOUT и OUT, как определено в спецификации ODBC. Однако драйвер Unified ODBC в настоящее время поддерживает только параметры типа IN для хранимых процедур.

Список параметров

odbc

Идентификатор соединения ODBC, за подробностями обращайтесь к odbc_connect().

query

Подготавливаемый запрос в виде строки.

Возвращаемые значения

Возвращает идентификатор результата ODBC, если SQL-команда была успешно подготовлена. В случае возникновения ошибки возвращает false.

Примеры

Пример #1 Пример использования odbc_execute() и odbc_prepare()

В данном коде значение $success будет равно true, только если все три параметра myproc являются параметрами IN:

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

Если нужно вызвать хранимую процедуру с использованием параметров INOUT или OUT, рекомендуется использовать собственный модуль для вашей базы данных (например, oci8 для Oracle).

Смотрите также

add a note

User Contributed Notes 4 notes

up
13
bslorence
17 years ago
Is it just me or is the code above misleading? It makes it look like odbc_execute() returns a resource suitable, say, for passing to one of the odbc_fetch_* functions.

In fact, odbc_execute() returns a boolean, which simply indicates success (TRUE) or failure (FALSE). The variable to pass to odbc_fetch_* is the same one that you pass to 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 {
// handle error
}
?>
up
1
lzsiga at freemail dot c3 dot hu
5 years ago
The resource returned by odbc_prepare can be freed with odbc_free_result.
up
1
Marek
19 years ago
Use this example for 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));
up
0
info dot codesquare at gmail dot com
5 months ago
after 2 days finaly got a working code
(SQL SERVER stored procedure with parameters through ODBC)

STORED PROCEDURE

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);
To Top