PHP ADODB kullanarak saklı yordam çağırma

2 Cevap php

PHP ADODB kullanarak bir saklı yordam çağırmak için nasıl bir uygun belgelere bulamadı. Birisi lütfen yardımcı olabilir misiniz?

Bu ne var şimdi ve ben kirli bir yaklaşım olduğunu hissediyorum (değil ya?):

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

Bunun yerine CALL deyimi hardcoding, çoklu veritabanı standardı için kod herhangi bir yolu var mı?

EDIT 01:

Ben de önerdiği gibi bu kod çalıştı 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>";

Ama sonuç oldu:

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

Ne sorun olabilir? Dokümantasyon Oracle ve MySQL kullanarak duyuyorum. Ama ADODB yöntemleri, tüm veritabanları için aynı olduğuna inanıyoruz.

Herhangi bir yardım için teşekkür ederiz.

2 Cevap

Tamam. Ben cevabı buldum. MySQL için ADODB bu yapmak için temiz hiçbir yolu yoktur. PrepareSP() yöntemi kullanılabilir, ancak olabilir değil InParameter ya da OutParameter yöntemleri.

ADODB belgelerine diyor ki:

InParameter() is a wrapper function that calls Parameter() with $isOutput=false. The advantage of this function is that it is self-documenting, because the $isOutput parameter is no longer needed. Only for mssql and oci8 currently.

OutParameter() is a wrapper function that calls Parameter() with $isOutput=true. The advantage of this function is that it is self-documenting, because the $isOutput parameter is no longer needed. Only for mssql and oci8 currently.

Ayrıca kullanmak için bu seçeneği:

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

seems appropriate, because PrepareSP () is used adodb and oracle. I have not had any luck trying the same adodb library and mysql. as you did your Nirmal.