Я использую библиотеку Adodb PHP для обработки функций БД. Большая часть функциональности была обработана с использованием хранимых процедур. Однако в некоторых случаях мне нужно написать быстрые пользовательские запросы для завершения процесса.
Код:
$Result = array();
$this->DB->SetFetchMode(ADODB_FETCH_ASSOC);
$Result = $this->DB->PrepareSP("UPDATE Member SET FirstName = '" . $param['FirstName'] . "', LastName = '" . $param['LastName'] . "', Email = '".$param['Email']."', DateOfBirth = '".$param['DateOfBirth']."', HoroscopeID = ".$param['HoroscopeID'].", Gender = '".$param['Gender']."', CountryID = ".$param['CountryID']." WHERE ID = ".$param['MemberId'].";SELECT @@IDENTITY AS AffectedRows;");
$Result = $this->DB->GetArray($Result);
Результат:
array (size=1)
0 =>
array (size=1)
'AffectedRows' => null
Я также попробовал:
$this->DB->affected_rows();
Возвращает 0 каждый раз. Я уже повторил внутренний запрос и запустил Navicat, он работает нормально. Однако, когда он вызывается через код, он не обновляет никаких записей.
Вот как получить доступ к выходным данным хранимой процедуры в ADOdb:
/*
* Your stored procedure preparation returns a handle
*/
$procedure = $this->DB->prepareSp("your statement...");
/*
* You prepare and set an output parameter to receive your affected rows
* The name of the parameter matches the stored procedure variable
*/
$outParameterName = 'AffectedRows';
$outParameterValue = 0;
$ok = $this->DB->outParameter($procedure,$outParameterName,$outParameterValue);
/*
* Execute the procedure handle , it is an update so a resultset is not returned
*/
$result = $this->DB->execute($procedure);
/*
* The value of the Affected rows is now available in your out Parameter value
*/
print "AffectedRows IS NOW $outParameterValue";
Других решений пока нет …