phpday 2025 - Call For Papers

odbc_prepare

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

odbc_preparePrepares a statement for execution

Description

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

Prepares a statement for execution. The ODBC result object can be used later to execute the statement with odbc_execute().

Some databases (such as IBM DB2, MS SQL Server, and Oracle) support stored procedures that accept parameters of type IN, INOUT, and OUT as defined by the ODBC specification. However, the Unified ODBC driver currently only supports parameters of type IN to stored procedures.

Parameters

odbc

The ODBC connection object, see odbc_connect() for details.

query

The query string statement being prepared.

Return Values

Returns an ODBC result object if the SQL command was prepared successfully. Returns false on error.

Changelog

Version Description
8.4.0 odbc expects an Odbc\Connection instance now; previously, a resource was expected.
8.4.0 This function returns an Odbc\Result instance now; previously, a resource was returned.

Examples

Example #1 odbc_execute() and odbc_prepare() example

In the following code, $success will only be true if all three parameters to myproc are IN parameters:

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

If you need to call a stored procedure using INOUT or OUT parameters, the recommended workaround is to use a native extension for your database (for example, oci8 for Oracle).

See Also

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
info dot codesquare at gmail dot com
9 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);
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));
To Top