Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [AJAX] Brak połączenia do bazy w wywołaniu Ajax
Forum PHP.pl > Forum > PHP
Blackhole
Hej.
Łączę się do bazy Oracle używając:
  1. $conn = oci_pconnect(...);

Od razu po połączeniu ustawiam:
  1. $_SESSION["ora"] = $conn;

Dalej chcę mieć możliwość usunięcia rekordu z bazy korzystając z AJAX-a w JQuery. Wywołuję funkcję:
  1. <span onclick="ajax_del_nam(1)">Usuń</span>
która wygląda tak:
  1. function ajax_del_nam(nam_id) {
  2. $.ajax({
  3. url: "jQ_ajax.php",
  4. type: "POST",
  5. data: {func: "del_nam",
  6. id: nam_id
  7. },
  8. dataType: "text",
  9. success: function(data,status) {
  10. alert("Wpis usunięto.");
  11. },
  12. error: function(xhr, status, errorThr) {
  13. alert("Jakiś błąd.\n\nxhr: "+xhr+"\nStatus: "+status+"\nerrorThr: "+errorThr);
  14. }
  15. });
  16. }

W jQ_ajax.php mam:
  1. <?
  2.  
  3. function del_nam($id) {
  4. if (!isset($_SESSION['ora']) or $_SESSION['ora']==NULL) {
  5. log_me('del_nam:: Brak łącznika do bazy! $_SESSION["ora"]');
  6. }
  7. foreach ($_SESSION as $k => $v) {
  8. log_me('$_SESSION["'.$k.'"] = '.$v);
  9. }
  10.  
  11. $s = oci_parse($_SESSION['ora'],
  12. "BEGIN
  13. :out := pck.del(:id, :uid);
  14. END;");
  15. if (!$s) {
  16. $e = oci_error($_SESSION['ora']);
  17. log_me("Błąd parsowania (pck.del): ".$e["message"]);
  18. log_me("Błąd parsowania (pck.del): ".$e["sqltext"]." at ".$e['offset']);
  19. return -1;
  20. }
  21. else {
  22. @oci_bind_by_name($s, ":id", $id);
  23. @oci_bind_by_name($s, ":uid", $_SESSION['uid']);
  24. @oci_bind_by_name($s, ":out", $out, 10);
  25. if (!@oci_execute($s)) {
  26. $m = oci_error($s);
  27. log_me('del_nam', $m['message']);
  28. }
  29. else {
  30. log_me("del_nam = ".$out);
  31. }
  32. }
  33. }
  34. //=====================================
  35. switch ($_POST['func']) {
  36. case 'del_nam': del_nam($_POST['id']); break;
  37. };
  38. ?>
Niestety loguje mi się (funkcją log_me) wpis o treści:
Cytat
$_SESSION["ora"] = 0
Nie wiem, czemu połączenie do bazy znikło.
Proszę o wskazówki...
Z góry dziękuję.
adbacz
Zakładam, że funkcja oci_pconnect() zwraca resource, a tego nie przypiszesz do sesji. W sesji można trzymać wszystko, oprócz resource wink.gif

Musisz za każdym razem łączyć się z bazą danych gdy masz request. Najlepiej napisz sobie jakąś klasę, która będzie przechowywała ten resource połączenia z bazą danych. Albo chociaż plik, w którym będzie wykonywane połączenie i za każdym razem ładuj go poprzez require w plikach, gdzie wykonujesz akcje. W tedy będziesz miał dostęp do zmiennej $conn wszedzie, gdzie będziesz chciał.
!*!
@Blackhole - a jaki jest sens rozdzielania tego? Przez ajax odwołaj się normalnie do pliku który operuje na bazie, tak jak byś to robił w zwykłym PHP, później sprawdź tylko czy zapytanie przyszło przez AJAX i zwróć np. json.
Blackhole
Dzięki za pomoc smile.gif Nie wiedziałem, że resource jest takie specyficzne, że nie może być trzymane w sesji. Znacie może powód tego?
Pyton_000
http://php.net/manual/en/intro.session.php
Ładna kolorowa ramka
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.