PHP Doku:: Fügt einer Stored Procedure oder einer Remote Stored Procedure einen Parameter hinzu - function.mssql-bind.html

Verlauf / Chronik / History: (1) anzeigen

Sie sind hier:
Doku-StartseitePHP-HandbuchFunktionsreferenzDatenbankerweiterungenAnbieterspezifische DatenbankerweiterungenMicrosoft SQL ServerMssql-Funktionenmssql_bind

Ein Service von Reinhard Neidl - Webprogrammierung.

Mssql-Funktionen

<<Mssql-Funktionen

mssql_close>>

mssql_bind

(PHP 4 >= 4.0.7, PHP 5, PECL odbtp >= 1.1.1)

mssql_bindFügt einer Stored Procedure oder einer Remote Stored Procedure einen Parameter hinzu

Beschreibung

bool mssql_bind ( resource $stmt , string $param_name , mixed &$var , int $type [, bool $is_output = false [, bool $is_null = false [, int $maxlen = -1 ]]] )

Fügt einer Stored Procedure oder einer Remote Stored Procedure einen Parameter hinzu.

Parameter-Liste

stmt

Der mittels mssql_init() erhaltene Bezeichner der Anweisung.

param_name

Der Name des Parameters als Zeichenkette

Hinweis:

Sie müssen das Zeichen @ der Syntax von T-SQL entsprechend einfügen. Eine Erklärung finden Sie bei mssql_execute().

var

Die PHP-Variable, an die Sie den MS SQL-Parameter binden. Sie wird als Referenz übergeben, um die OUTPUT- und RETVAL-Werte nach der Ausführung der Prozedur abzurufen.

type

Mögliche Werte: SQLTEXT, SQLVARCHAR, SQLCHAR, SQLINT1, SQLINT2, SQLINT4, SQLBIT, SQLFLT4, SQLFLT8, SQLFLTN.

is_output

Ob der Parameter ein OUTPUT-Parameter ist oder nicht. Falls er ein OUTPUT-Parameter ist uns Sie das nicht angeben, wird er wie ein normaler Eingabeparameter behandelt und es wird keine Fehlermeldung ausgegeben.

is_null

Ob der Parameter NULL ist oder nicht. Es genügt nicht, den Wert NULL als var zu übergeben.

maxlen

Wird bei char/varchar-Werten verwendet. Sie müssen die Länge der Daten angeben. Falls der Parameter vom Typ varchar(50) ist, muss also der type SQLVARCHAR und dieser Wert 50 sein.

Rückgabewerte

Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.

Beispiele

Beispiel #1 mssql_bind()-Beispiel

<?php
// Mit MSSQL verbinden und Datenbank auswählen
mssql_connect('KALLESPC\SQLEXPRESS''sa''phpfi');
mssql_select_db('php');

// Eine neue Stored Prodecure erzeugen
$anweisung mssql_init('NeuerBenutzer');

// Die Feldnamen anbinden
mssql_bind($anweisung'@username',  'Kalle',  SQLVARCHAR,  false,  false,  60);
mssql_bind($anweisung'@name',      'Kalle',  SQLVARCHAR,  false,  false,  60);
mssql_bind($anweisung'@age',       19,       SQLINT1,     false,  false,   3);

// Anweisung ausführen
mssql_execute($anweisung);

// Den Anweisungsspeicher freigeben
mssql_free_statement($anweisung);
?>

Siehe auch


8 BenutzerBeiträge:
- Beiträge aktualisieren...
brad at foreverybody dot com
16.07.2010 20:39
if you are experiencing difficulties binding an empty string because it is being converted to NULL by your driver try the following:

<?php
if($var === ''){
           
//stupid hack to prevent mssql driver from converting empty strings to null. now they arent empty strings but they will get trimmed down to legth 0 ;-)
       
$var = ' ';
       
$type = SQLVARCHAR;
       
$isNull = false;
       
$maxLen = 0;
    }

mssql_bind($stmt, $param_name, $var, $type, $is_output,$isNull$maxLen);
?>
alvaro at demogracia dot com
24.11.2009 12:12
There isn't a bind function for regular SQL queries; not even a escape function. I found this nice piece of code:

<?php
function mssql_escape($data) {
    if(
is_numeric($data))
        return
$data;
   
$unpacked = unpack('H*hex', $data);
    return
'0x' . $unpacked['hex'];
}
?>

http://stackoverflow.com/questions/574805/
Anonymous
17.11.2009 7:35
I found SQLVARCHAR better for datetime.

It was performing some other non-strtotime() convertions when it was set to SQLINT4
valerio dot della-porta dot com
22.04.2009 11:00
Use:
SQLVARCHAR for binary
SQLINT4 for datetime
SQLFLT8 for decimal
SQLVARCHAR for image
SQLFLT8 for money
SQLCHAR for nchar
SQLTEXT for ntext
SQLFLT8 for numeric
SQLVARCHAR for nvarchar
SQLFLT8 for real
SQLINT4 for smalldatetime
SQLFLT8 for smallmoney
SQLVARCHAR for sql_variant
SQLINT4 for timestamp
SQLVARCHAR for varbinary
Anonymous
25.01.2009 14:08
<?php
//IP Address, if instance then IP\Instance
$server = 'a.b.c.d';
$link = mssql_connect($server, 'sql_user', 'sql_user_pass');

//Select DB
$dbn = 'dbName';
mssql_select_db($dbn);

//Define Procedure
$lala = 'tstProc';
$proc = mssql_init($lala, $link);

//Define Parameters
$parm1 = 'one';
$parm2 = 'two';
$parm3 = 'three';

//Load Parameters
mssql_bind($proc, '@num', $parm1, SQLCHAR, false, false, 10);
mssql_bind($proc, '@naamen', $parm2, SQLCHAR, false, false, 10);
mssql_bind($proc, '@desci', $parm3, SQLCHAR, false, false, 10);

//Execute Procedure
mssql_execute($proc);

//Free Memory
mssql_free_statement($proc);

//...and whenever the wolf did howl, all the sheep had to do was bleat!
?>
Anonymous
8.06.2008 19:52
for type :

SQLCHAR     DBCHAR
SQLVARCHAR     DBCHAR
SQLTEXT     DBCHAR
SQLBINARY     DBBINARY
SQLVARBINARY     DBBINARY
SQLIMAGE     DBBINARY
SQLINT1     DBTINYINT
SQLINT2     DBSMALLINT
SQLINT4     DBINT
SQLFLT4     DBFLT4
SQLFLT8     DBFLT8
SQLBIT     DBBIT
SQLMONEY4     DBMONEY4
SQLMONEY     DBMONEY
SQLDATETIM4     DBDATETIM4
SQLDATETIME     DBDATETIME
SQLDECIMAL     DBDECIMAL
SQLNUMERIC     DBNUMERIC

source : http://msdn.microsoft.com/en-us/library/aa937008(SQL.80).aspx
daryl dot mitchell at usask dot ca
5.12.2007 18:56
I had the same problem but the posted solution above just produced null results.  Here's a modification that ended up working:

#THIS SUCCEEDS, USES A REFERENCE
mssql_bind($proc, '@'.$key, $sp_parms[$key], SQLVARCHAR)
or die("Unable to bind $sp_name:$key<br>".mssql_get_last_message());
fheald at buzztime dot com
6.08.2007 21:27
mssql_bind binds by reference, not by value, even on input parameters.  Improper binding can cause strange errors; in my case "Error converting data type varchar to int"

--SAMPLE STORED PROCEDURE
CREATE Procedure [dbo].[myproc]
(
    @one VARCHAR(10) = 'n1',
    @two VARCHAR(10) = 'n2',
    @three VARCHAR(10) = 'n3',
    @four VARCHAR(10) = 'n4',
    @five VARCHAR(10) = 'n5'
)
AS
BEGIN
SET NOCOUNT ON;

SELECT
    @one AS 'one',
    @two AS 'two',
    @three AS 'three',
    @four AS 'four',
    @five AS 'five'
END

//SAMPLE PHP CALL
$sp_name = 'mydb.dbo.myproc';
$proc = mssql_init($sp_name);
$sp_parms->one = 'one';
$sp_parms->two = 'two';
$sp_parms->three = 'three';

foreach ($sp_parms as $key=>$parm) {
    #THIS FAILS, because it's binding values!
    #mssql_bind($proc, '@'.$key, $parm, SQLVARCHAR)
    #    or die("Unable to bind $sp_name:$key<br>".mssql_get_last_message());
    #THIS SUCCEEDS, USES A REFERENCE
    mssql_bind($proc, '@'.$key, $sp_parms->$key, SQLVARCHAR)
        or die("Unable to bind $sp_name:$key<br>".mssql_get_last_message());
}



PHP Powered Diese Seite bei php.net
The PHP manual text and comments are covered by the Creative Commons Attribution 3.0 License © the PHP Documentation Group - Impressum - mail("TO:Reinhard Neidl",...)