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
mssql_bind
(PHP 4 >= 4.0.7, PHP 5, PECL odbtp:1.1.1-1.1.4)
mssql_bind — ストアドプロシージャまたはリモートストアドプロシージャへパラメータを追加する
説明
ストアドプロシージャまたはリモートストアドプロシージャへパラメータをバインドします。
パラメータ
- stmt
-
mssql_init() で取得したステートメントリソース。
- param_name
-
パラメータ名を表す文字列。
注意: T-SQL 構文のように @ 文字を含めなければなりません。 mssql_execute() にある例を参照ください。
- var
-
MSSQL パラメータとしてバインドする PHP 変数。 値渡し、参照渡しのどちらも可能です。実行後に OUTPUT や RETVAL を取得するには参照渡しとします。
- type
-
SQLTEXT, SQLVARCHAR, SQLCHAR, SQLINT1, SQLINT2, SQLINT4, SQLBIT, SQLFLT4, SQLFLT8, SQLFLTN のいずれか。
- is_output
-
値が OUTPUT パラメータであるかどうか。OUTPUT パラメータであることに気づかなかった場合、それは通常の INPUT パラメータとして扱われ、エラーは発生しません。
- is_null
-
パラメータが NULL かどうか。NULL 値を var に渡しても正しく動作しません。
- maxlen
-
char/varchar 値で使用します。データの長さを指定する必要があります。 たとえばパラメータが varchar(50) の場合、型は SQLVARCHAR で、この値が 50 となります。
返り値
成功した場合に TRUE を、失敗した場合に FALSE を返します。
例
例1 mssql_bind() の例
<?php
$cn = mssql_connect($DBSERVER, $DBUSER, $DBPASS);
mssql_select_db($DB, $cn);
$sp = mssql_init("WDumpAdd"); // ストアドプロシージャ名
mssql_bind($sp, "@productname", stripslashes($newproduct), SQLVARCHAR, false, false, 150);
mssql_bind($sp, "@quantity", stripslashes($newquantity), SQLVARCHAR, false, false, 50);
mssql_execute($sp);
mssql_close($cn);
?>
mssql_bind
09-Jun-2008 02:52
06-Dec-2007 02: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());
07-Aug-2007 04: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());
}
