在PHP中使用ADODB调用存储过程

时间:2010-02-22 04:28:44

标签: php mysql adodb-php

我找不到关于如何在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。但我相信所有数据库的ADODB方法都是相同的。

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

行。我自己找到了答案。在ADODB for MySQL中没有干净的方法可以做到这一点。可以使用PrepareSP()方法,但不能使用InParameterOutParameter方法。

ADODB文档说:

  

InParameter()是一个包装函数   用它调用Parameter()   $ isOutput =假。这样做的好处   功能就是它   自我记录,因为   $ isOutput参数不再   需要的。 仅适用于mssql和oci8   目前

     

OutParameter()是一个包装函数   用它调用Parameter()   $ isOutput =真。这样做的好处   功能就是它   自我记录,因为   $ isOutput参数不再   需要的。 仅适用于mssql和oci8   目前

答案 1 :(得分:1)

我通过Adodb图书馆完成了这个检查这个.. $ addProduct = $ obj-&gt; ExecuteQuery(“Begin; DECLARE @ProductCode as varchar(100); EXEC CREATEPRODUCT'$ pname','$ price',@ ProductCode OUTPUT,'$ merchantId'; select @ProductCode; End;” );

如需完整说明,请查看此内容 http://developer99.blogspot.com/2011/07/calling-ms-sql-sp-from-php.html

答案 2 :(得分:0)

此选项也可以使用它:

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

似乎合适,因为PrepareSP ()使用了adodb和oracle。 我没有运气尝试相同的adodb库和mysql。就像你做了你的Nirmal一样。