Я не мог найти правильную документацию о том, как вызвать хранимую процедуру с помощью ADODB в PHP. Может кто-нибудь помочь, пожалуйста?
Это то, что у меня есть сейчас, и я чувствую, что это грязный подход (или нет?):
$stmt = "CALL LocFillData('foo', 'bar', @nullcount, @totalcount)"; $rsstmt = "SELECT @nullcount, @totalcount"; $rs = $db->Execute($stmt); $rsstmt = $db->Execute($rsstmt); var_dump($rsstmt);
Вместо hardcoding CALL
, есть ли способ закодировать его для стандарта с несколькими базами данных?
Я пробовал этот код, как это было предложено в руководстве ADODB :
$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 одинаковы для всех БД.
Спасибо за любую помощь.
ОК. Я сам нашел ответ. В ADODB для MySQL нет чистого способа сделать это. Может использоваться метод PrepareSP()
, но не метод InParameter
или OutParameter
.
Документация ADODB гласит:
InParameter () – это функция-оболочка, которая вызывает параметр () с $ isOutput = false. Преимущество этой функции заключается в том, что она самодокументирована, потому что параметр $ isOutput больше не нужен. Только для mssql и oci8 в настоящее время.
OutParameter () – это функция-обертка, которая вызывает параметр () с помощью $ isOutput = true. Преимущество этой функции заключается в том, что она самодокументирована, потому что параметр $ isOutput больше не нужен. Только для mssql и oci8 в настоящее время.
Я сделал это через библиотеку Adodb, чтобы проверить это .. $ addProduct = $ obj-> ExecuteQuery ("Начать, DECLARE @ProductCode как varchar (100); EXEC CREATEPRODUCT '$ pname', '$ price', @ProductCode OUTPUT, '$ merchantId', выберите @ProductCode; End; ");
для полного объяснения вы можете проверить это http://developer99.blogspot.com/2011/07/calling-ms-sql-sp-from-php.html
этот вариант также использовать его:
$rs = $db->Execute($stmt);
$rsstmt = $db->Execute($rsstmt);
кажется подходящим, потому что PrepareSP ()
используется adodb и oracle. Мне не удавалось пробовать одну и ту же библиотеку adodb и mysql. как вы делали свой Нирмал.