我找不到关于如何在PHP中使用ADODB调用存储过程的正确文档。有人能帮忙吗?
这就是我现在拥有的,我觉得这是一个肮脏的方法(或者不是?):

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

除了硬编码CALL语句之外,是否有任何方法可以将其编码为多数据库标准?
编辑01:
我按照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>";

但结果是:
object(ADORecordSet_empty)#15 (6) {
  ["dataProvider"]=>
  string(5) "empty"
  ["databaseType"]=>
  bool(false)
  ["EOF"]=>
  bool(true)
  ["_numOfRows"]=>
  int(0)
  ["fields"]=>
  bool(false)
  ["connection"]=>
  bool(false)
}

有什么问题吗?文档是针对Oracle的,我使用的是MySQL。但我相信所有DBs的ADODB方法都是相同的。
谢谢你的帮助。

最佳答案

好 啊。我自己找到了答案。在ADODB for MySQL中没有一个干净的方法可以做到这一点。可以使用PrepareSP()方法,但不能使用InParameterOutParameter方法。
ADODB文档说:
InParameter()是一个包装函数
调用Parameter()的
$isOutput=错误。这样做的好处
功能就是
自我记录,因为
$isOutput参数不再是
需要。仅适用于mssql和oci8
目前。
OutParameter()是包装函数
调用Parameter()的
$isOutput=真。这样做的好处
功能就是
自我记录,因为
$isOutput参数不再是
需要。仅适用于mssql和oci8
目前。

关于php - 在PHP中使用ADODB调用存储过程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2308790/

10-11 17:28