Вызов хранимой процедуры с использованием ADODB в PHP - PullRequest
2 голосов
/ 22 февраля 2010

Я не смог найти надлежащую документацию о том, как вызвать хранимую процедуру с использованием ADODB в PHP. Может кто-нибудь помочь, пожалуйста?

Это то, что у меня сейчас, и я чувствую, что это грязный подход (или нет?):

$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 :

<code>$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 "
";

Но результат был:

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 ]

1 голос
/ 20 июля 2011

Я сделал это через библиотеку Adodb проверить это .. $ addProduct = $ obj-> 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

1 голос
/ 22 февраля 2010

OK. Я нашел ответ сам. Нет никакого чистого способа сделать это в ADODB для MySQL. Можно использовать метод PrepareSP(), но не методы InParameter или OutParameter.

Документация ADODB гласит:

InParameter () - это функция-обертка который вызывает Parameter () с $ IsOutput = ложь. Преимущество этого функция в том, что это самодокументируемый, потому что $ isOutput параметр больше не необходимо. Только для mssql и oci8 в настоящее время.

OutParameter () - это функция-обертка который вызывает Parameter () с $ IsOutput = верно. Преимущество этого функция в том, что это самодокументируемый, потому что $ isOutput параметр больше не необходимо. Только для mssql и oci8 в настоящее время.

0 голосов
/ 27 января 2012

эта опция также используется:

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

кажется подходящим, потому что PrepareSP () используется adodb и oracle. Мне не повезло, пробуя ту же библиотеку adodb и mysql. как ты сделал свой Нирмал.

...