Calling Stored Procedure using ADODB in PHP

ぐ巨炮叔叔 提交于 2019-12-20 03:13:29

问题


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.


回答1:


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.




回答2:


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




回答3:


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.



来源:https://stackoverflow.com/questions/2308790/calling-stored-procedure-using-adodb-in-php

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!