2012-01-27 9 views
1

私はADOdb documentationの指示に従っていると私はそうのようなSQL Server 2008のデータベースにストアド・プロシージャを実行しようとしている:ADOdb PHPライブラリでMSSQLストアドプロシージャを実行するには?

$stmt = $db->PrepareSP('usp_insert_aweber_list'); 

$db->InParameter($stmt,$id,'List_ID',false,SQLINT4); 
$db->InParameter($stmt,$name,'Name',255,SQLVARCHAR); 
$db->InParameter($stmt,$campaigns_collection_link,'Campaign_Collections_Link',255,SQLVARCHAR); 
$db->InParameter($stmt,$custom_fields_collection_link,'Custom_Fields_Collection_Link',255,SQLVARCHAR); 
$db->InParameter($stmt,$http_etag,'HTTP_Etag',255,SQLVARCHAR); 
$db->InParameter($stmt,$resource_type_link,'Resource_Type_Link',255,SQLVARCHAR); 
$db->InParameter($stmt,$self_link,'Self_Link',255,SQLVARCHAR); 
$db->InParameter($stmt,$subscribers_collection_link,'Subscribers_Collection_Link',255,SQLVARCHAR); 
$db->InParameter($stmt,$total_subscribers,'Total_Subscribers',false,SQLINT4); 
$db->InParameter($stmt,$total_subscribed_subscribers,'Total_Subscribed_Subscribers',false,SQLINT4); 
$db->InParameter($stmt,$total_subscribers_subscribed_today,'Total_Subscribers_Subscribed_Today',false,SQLINT4); 
$db->InParameter($stmt,$total_subscribers_subscribed_yesterday,'Total_Subscribers_Subscribed_Yesterday',false,SQLINT4); 
$db->InParameter($stmt,$total_unconfirmed_subscribers,'Total_Unconfirmed_Subscribers',false,SQLINT4); 
$db->InParameter($stmt,$total_unsubscribed_subscribers,'Total_Unsubscribed_Subscribers',false,SQLINT4); 
$db->InParameter($stmt,$web_form_split_tests_collection_link,'Web_Form_Split_Tests_Collection_Link',255,SQLVARCHAR); 
$db->InParameter($stmt,$web_forms_collection_link,'Web_Forms_Collection_Link',255,SQLVARCHAR); 

$rs = $db->Execute($stmt); 

if (!$rs){ 
    print $db->ErrorMsg(); 
    echo '<br /><br />'; 
} 

上記のコードビットは、単に次のエラー・メッセージを出力:

[Microsoft][ODBC SQL Server Driver][SQL Server]Procedure or function 'usp_insert_aweber_list' expects parameter '@List_ID', which was not supplied. 

私は最初の$ db-> InParameter()呼び出しでList_IDパラメータを提供したと思います。私が間違っているなら私を訂正してください。 'param nameの前に@を追加する'と応答する前に、ドキュメンテーションにはそれが必要ではないことが書かれているので、すでに試してみたところ、同じエラーメッセージが表示されていました。

おかげ

+1

初心者の方は、 'InParameter'によって返された値をチェックして、実際に値をバインドしているのか、黙って失敗しているのか確認できます。 –

+0

@ dev-null-dweller:OK、InParameter呼び出しはfalseを返すが、なぜ失敗したのかについての説明はない。それが偽を返す理由を理解する方法はありますか? – Ryan

答えて

2

は、私はちょうどコード(その領域の変更を言及していないと5.14 & 5.15変更履歴)のADOdb 5.13に見て、MSSQL用のODBCドライバは、準備された文への結合パラメータをサポートしていないようだといあなたがそれをやろうとしている間は何のエラーも生じません。

0

これは以前のバージョンのSQL Serverでも動作していましたが、 'mssql'ドライバ(odbc_mssqlまたはado_mssqlではなく)を使用している場合にのみ有効です。

+0

さらに、PHPディレクトリのntwdblib.dllファイルをアップグレードして、SQL 2008( 'mssql'ドライバを使用)に対応するこれらの関数を取得しました。 – bikefever

+0

あなたはそれをどうやって説明してくれますか?@ bikefever。 – chandoo