开发者

Calling Stored Procedure using ADODB in PHP

I couldn't find a proper documentation on how to call a stored procedure using ADODB in PHP. Can someone help please?

This is what I have now and I feel it's a dirty approach (or not?):

$stmt = "CALL LocFillData('foo', 'bar', @nullcount, @totalcount)";
$rsstmt = "SELECT @nullcount, @totalcount";
$rs = $db->Execute($stmt);
$rsstmt = $db->Execute($rsstmt);
var_dump($rsstmt);

Instead of hardcoding the CALL statement, is there any way to code it for multi-database standard?

EDIT 01:

I tried this code as suggested in the ADODB Manual:

$dbname = DB_DATABASE;
$tbname = TABLE_CONTACT_LOCATIONS;

$stmt = $db->PrepareSP("BEGIN; adodb.LocFillData(:dbname, :tbname, :nullcount, :totalcount); END;");
$db->InParameter($stmt,$dbname,'dbname');
$db->InParameter($stmt,$tbname,'tbname');
$db->OutParameter($stmt,$nullcount,'nullcount');
$db->OutParameter($stmt,$totalcount,'totalcount');
$ok = $db->Execute($stmt) or die($db->ErrorMsg());

echo "<pre>";
var_dump($ok);
echo "</pre>";

But the result was:

object(ADORecordSet_empty)#15 (6) {
  ["dataProvider"]=>
  string(5) "empt开发者_如何转开发y"
  ["databaseType"]=>
  bool(false)
  ["EOF"]=>
  bool(true)
  ["_numOfRows"]=>
  int(0)
  ["fields"]=>
  bool(false)
  ["connection"]=>
  bool(false)
}

What could be the problem? The documentation was for Oracle and I am using MySQL. But I believe ADODB methods are same for all DBs.

Thank you for any help.


OK. I found the answer myself. There is no clean way to do that in ADODB for MySQL. The PrepareSP() method can be used, but not the InParameter or the OutParameter methods.

The ADODB documentation says:

InParameter() is a wrapper function that calls Parameter() with $isOutput=false. The advantage of this function is that it is self-documenting, because the $isOutput parameter is no longer needed. Only for mssql and oci8 currently.

OutParameter() is a wrapper function that calls Parameter() with $isOutput=true. The advantage of this function is that it is self-documenting, because the $isOutput parameter is no longer needed. Only for mssql and oci8 currently.


I have done this through by Adodb library check out this.. $addProduct = $obj->ExecuteQuery("Begin;DECLARE @ProductCode as varchar (100) ;EXEC CREATEPRODUCT'$pname', '$price', @ProductCode OUTPUT, '$merchantId';select @ProductCode;End;");

for complete explanation you can check out this http://developer99.blogspot.com/2011/07/calling-ms-sql-sp-from-php.html


this option to also use it:

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

seems appropriate, because PrepareSP () is used adodb and oracle. I have not had any luck trying the same adodb library and mysql. as you did your Nirmal.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜