Question

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) "empty"
  ["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.

Was it helpful?

Solution

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.

OTHER TIPS

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top