Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Obsługa możliwości MySQL 5.x w PHP 5.x, Może jakaś ciekawa abstrakcja?
anas
post
Post #1





Grupa: Zarejestrowani
Postów: 172
Pomógł: 0
Dołączył: 22.09.2002
Skąd: Gorzów Wlkp

Ostrzeżenie: (0%)
-----


Hej.

Jak w temacie. Poszukuje jakiejś dobrej klasy(najlepiej abstrakcji) do obsługi MySQL w wersji 5.x z jego nowymi możliwościami. Ciekawe wydaje mi się PDO, ale z tego co się doczytałem obsługuje MySQL w wersjach 4.0.x i niższych.

Czy mysqli obsługuje nowe możliwości MySQL ? - powodem utworzenia tego rozszerzenia, jak twierdzą serwisy zend.com, czy php.net było właśnie umożliwienie korzystania z dobrodziejstw nowych wersji MySQL (ale wyczytałem tylko o MySQL 4.1.x - czy np. 5.0.x również?).

Chodzi mi głównie o obsługę transakcji, procedur i funkcji.

Z góry thx za pomoc.

Pozdrawiam.

anas
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
dr_bonzo
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


PDO obsluzy mysql 5.0 -- przed chwila sprawdzalem, tzn tylko polaczenie, SELECT.

do po laczenia sie -- manual nie wspomina (moze za krotko szukalem) o specyfikowani portu serwera wu mysqla, droga prob i bledow oraz analogi dotarlkem do rozwiazania:
  1. <?php
  2.     $dbh = new PDO('mysql:host=127.0.0.1;port=3307;dbname=baza', 'user', 'haslo' );
  3.  
  4. ?>

------
"Chodzi mi głównie o obsługę transakcji, procedur i funkcji." -- tego nie sprawdzilem sad.gif

Ten post edytował dr_bonzo 27.11.2005, 20:09:49


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
SongoQ
post
Post #3





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

Ostrzeżenie: (0%)
-----


Cytat
Chodzi mi głównie o obsługę transakcji, procedur i funkcji.


Procedury i funkcje nie zaleza od db layera bo mozesz je wolac tak samo jak SQL, ale zawsze mozna sobie stworzyc ich wlasna obsluge, pytanie tylko po co?

Odnosnie transakcji podobnie jak w funkcjach wysylane jest polecenie do bazy danych i PDO wystawia metody: beginTransaction(), commit(), rollBack().


--------------------
Go to the top of the page
+Quote Post
anas
post
Post #4





Grupa: Zarejestrowani
Postów: 172
Pomógł: 0
Dołączył: 22.09.2002
Skąd: Gorzów Wlkp

Ostrzeżenie: (0%)
-----


Hej.

W takim razie ide testowac. SongoQ - chodzi mi wlasnie o fakt czy beginTransaction(), commit(), rollBack() zadziala poprawnie dla polaczenia z 5.x wersja serwera MySQL. Co do wywolywania procedur czy funkcji rzeczywiscie mozna to potraktowac jak zwykle zapytania, wiec tutaj nie problem smile.gif.

dr_bonzo: thx odnosnie polaczenia i info o probach.

pozdrowka

anas
Go to the top of the page
+Quote Post
krzysztof f.
post
Post #5





Grupa: Zarejestrowani
Postów: 18
Pomógł: 0
Dołączył: 22.11.2005

Ostrzeżenie: (0%)
-----


Wczoraj zainstalowałem php 5.1.0 i mysql 5.0.15 i zacząłem testować PDO w takiej konfiguracji. Zamieszczam zestaw testów, który u mnie zakończył się powodzeniem. Sprawdziłem podstawowe rzeczy. Niestety napotkałem problemy w wywoływaniu procedur poprzez PreparedStatment i dowiązywanie parametrów metodami PDOStatement::bindParam() i PDOStatement::bindValue(). Póki co nie udało mi się. Efekt jest taki że skrypt się zapętla. Może komuś się udało?

Do testowania kodu używam http://sourceforge.net/projects/simpletest/

  1. <?php 
  2.  
  3. require_once 'simpletest/unit_tester.php';
  4. require_once 'simpletest/reporter.php';
  5.  
  6. class PDOPureTestCase extends UnitTestCase
  7. {
  8.  private $_oDb;
  9.  private $_oInsertStmt;
  10.  private $_oSelectStmt;
  11.  
  12.  public function __construct()
  13.  {
  14. parent::__construct( 'Test rozszerzenia PDO' );
  15.  
  16. // Połączenie z bazą
  17. $aParams = array( PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
  18. PDO::ATTR_CASE => PDO::CASE_LOWER,
  19. PDO::ATTR_PERSISTENT => 1, 
  20. PDO::ATTR_TIMEOUT => 5 );
  21. $this->_oDb = new PDO( 'mysql:host=localhost;dbname=test', 'root', 'blazej', $aParams );
  22. $this->_oDb->setAttribute( PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, 1 );
  23.  
  24. $this->_oInsertStmt = $this->_oDb->prepare( 'INSERT INTO test ( id,
  25. name )
  26.  VALUES ( ?, ? )' );
  27. $this->_oSelectStmt = $this->_oDb->prepare( 'SELECT id,
  28. name
  29.  FROM test
  30.  WHERE name = ?' );
  31. $this->_oDeleteStmt = $this->_oDb->prepare( 'DELETE FROM test
  32.  WHERE id = ?' );
  33.  }
  34.  
  35.  function setUp() {
  36. $this->_oDb->exec( "INSERT INTO test ( id,
  37.  name )
  38. VALUES ( 1,
  39.  'Krzysztof' ) " );
  40.  }
  41.  
  42.  function tearDown() {
  43. $this->_oDb->exec( 'DELETE FROM test' );
  44.  }
  45.  
  46.  public function testTransactionCommit()
  47.  {
  48. try
  49. {
  50.  $bCaughtException = false;
  51.  $this->_oDb->beginTransaction();
  52.  $this->_oDeleteStmt->bindValue( 1, 1, PDO::PARAM_INT );
  53.  $iDeletedRows = $this->_oDeleteStmt->execute();
  54.  $this->_oDb->commit();
  55.  
  56.  $this->assertEqual( 1 , $iDeletedRows );
  57.  $this->assertEqual( 0 , $this->_oDb->query( 'SELECT COUNT(*) FROM test' )->fetchColumn() );
  58. }
  59. catch ( Exception $oE )
  60. {
  61.  $bCaughtException = true;
  62. }
  63. $this->assertFalse( $bCaughtException );
  64.  }
  65.  
  66.  public function testTransactionRollBack()
  67.  {
  68. try
  69. {
  70.  $bCaughtException = false;
  71.  $this->_oDb->beginTransaction();
  72.  $this->_oDeleteStmt->bindValue( 1, 1, PDO::PARAM_INT );
  73.  $iDeletedRows = $this->_oDeleteStmt->execute();
  74.  $this->_oDb->rollBack();
  75.  
  76.  $this->assertEqual( 1 , $iDeletedRows );
  77.  $this->_oSelectStmt->bindValue( 1, 'Krzysztof', PDO::PARAM_STR );
  78.  $this->_oSelectStmt->execute(); 
  79.  $this->assertEqual( 'Krzysztof' , $this->_oSelectStmt->fetchColumn( 1 ) );  
  80. }
  81. catch ( Exception $oE )
  82. {
  83.  $bCaughtException = true;
  84. }
  85. $this->assertFalse( $bCaughtException );
  86.  }
  87.  
  88.  public function testOnceQuery()
  89.  {
  90. try
  91. {
  92.  $bCaughtException = false;
  93.  $aResult = array( 0 => 1,
  94.  1 => 'Krzysztof' );
  95.  $oStmt = $this->_oDb->query( 'SELECT * FROM test' );
  96.  $this->assertIsA( $oStmt, 'PDOStatement' );
  97.  $this->assertEqual( $oStmt->fetch( PDO::FETCH_NUM ), $aResult );
  98. }
  99. catch ( Exception $oE )
  100. {
  101.  $bCaughtException = true;
  102. }
  103. $this->assertFalse( $bCaughtException );
  104.  }
  105.  
  106.  public function testStoredProcedure()
  107.  {
  108. try
  109. {
  110.  $bCaughtException = false;
  111.  $this->_oDb->exec( 'CALL select_name( @param )' );
  112.  $oStmt = $this->_oDb->query( 'SELECT @param' );
  113.  $this->assertEqual( 'Krzysztof', $oStmt->fetchColumn() );
  114. }
  115. catch ( Exception $oE )
  116. {
  117.  $bCaughtException = true;
  118. }
  119. $this->assertFalse( $bCaughtException );
  120.  }
  121.  
  122.  public function testStoredFunction()
  123.  {
  124. try
  125. {
  126.  $oStmt = $this->_oDb->query( "SELECT hello('Krzysztof')" );
  127.  $this->assertEqual( 'Hello, Krzysztof!', $oStmt->fetchColumn() );
  128. }
  129. catch ( Exception $oE )
  130. {
  131.  $bCaughtException = true;
  132. }
  133. $this->assertFalse( $bCaughtException );
  134.  }
  135.  
  136. }
  137. ?>


..jest green bar, więc nie jest tak źle. Ja kupuje to.
Go to the top of the page
+Quote Post
SongoQ
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

Ostrzeżenie: (0%)
-----


Odnosnie metody PDOStatement::bindParam() to tak naprawde stworzone bylo z mysla o ORACLE gdyz wymagany jest bind param jesli zapytanie przekracza 4KB. Jesli faktycznie w przypadku MySQL jest blad to nic innego nie zostaje nam jak czekac az zostanie to naprawione.


--------------------
Go to the top of the page
+Quote Post
Ozzy
post
Post #7





Grupa: Zarejestrowani
Postów: 204
Pomógł: 0
Dołączył: 26.12.2003
Skąd: Rzeszów

Ostrzeżenie: (0%)
-----


Cytat
Niestety napotkałem problemy w wywoływaniu procedur poprzez PreparedStatment i dowiązywanie parametrów metodami PDOStatement::bindParam() i PDOStatement::bindValue(). Póki co nie udało mi się. Efekt jest taki że skrypt się zapętla


Wydaje mi się, że mamy podobny problem. Mój jest opisany tutaj i został oznaczony jako fałszywy, ponieważ wg. developerów php jest to wina binarnej niekompatybilności klienta MySQL, chociaż uzywając klienta 5.0.16 i serwera 5.0.16 praktycznie każde użycie mysqli powoduje zapętlenie się.

Ten post edytował Ozzy 13.12.2005, 01:37:51
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 09:12