Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][PDO][MySQL] closeCursor() czy wymagany?
maro20
post
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 1
Dołączył: 7.03.2009

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


Czy wymagane jest używanie closeCursor()? W kodzie przedstawionym poniżej nic nie wnosi czy użyje czy też nie to i tak mogę wykonać kolejne zapytanie. Macie jakiś przykład na którym można zobaczyć istotę działania closeCursor()?
  1. include_once 'config.inc.php';
  2. $pdo=new Pdo('mysql:host='.DB_HOST.';dbname='.DB_NAME.';port='.DB_PORT , DB_USER, DB_PASS, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
  3. $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  4.  
  5. $user = 'olek';
  6. $players = $pdo -> prepare('SELECT * FROM players WHERE user = ?');
  7. $players -> bindParam(1, $user);
  8. $players -> execute();
  9. $player = $players -> fetch();
  10. echo $player['email'].'<br>';
  11. $players -> closeCursor();
  12.  
  13. $user = 'piotrek';
  14. $players -> execute();
  15. $player = $players -> fetch();
  16. echo $player['email'].'<br>';
  17. //$players -> closeCursor();
  18.  
  19. $user = 'marek';
  20. $players -> execute();
  21. $player = $players -> fetch();
  22. echo $player['email'].'<br>';
  23. //$players -> closeCursor();
  24. echo $player['email'].'<br>';


Go to the top of the page
+Quote Post
darko
post
Post #2





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


W niektórych przypadkach (driver-specific) zwiększa wydajność, zresztą wszystko jest tu: http://www.php.net/manual/en/pdostatement.closecursor.php
Go to the top of the page
+Quote Post
maro20
post
Post #3





Grupa: Zarejestrowani
Postów: 6
Pomógł: 1
Dołączył: 7.03.2009

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


Przed napisaniem posta na forum dokładnie przeczytałem informacje ze strony którą podałeś. Sądząc po odpowiedzi nie jest to wymagane ino zalecane. Czy się mylę? Bo widziałem w kilku opisach PDO "po zakończeniu pobierania danych niezbędne jest ich zamknięcie, aby móc wykonać kolejne zapytania!" a jak widać kod który wkleiłem w pierwszym poście działa i nie muszę do tego zamykać kursora.
Go to the top of the page
+Quote Post
darko
post
Post #4





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


Tu naprawdę jest wszystko napisane:
Cytat
(...) To ensure that the application will work with all database drivers, the author inserts a call to PDOStatement::closeCursor() on $stmt before executing the $otherStmt PDOStatement object.

<?php
/* Create a PDOStatement object */
$stmt = $dbh->prepare('SELECT foo FROM bar');

/* Create a second PDOStatement object */
$otherStmt = $dbh->prepare('SELECT foobaz FROM foobar');

/* Execute the first statement */
$stmt->execute();

/* Fetch only the first row from the results */
$stmt->fetch();

/* The following call to closeCursor() may be required by some drivers */
$stmt->closeCursor();

/* Now we can execute the second statement */
$otherStmt->execute();
?>
(...)


Generalnie lepiej używać closeCursor() dla lepszej przenośności pomiędzy różnymi bazami danych, nigdy nic nie wiadomo, kiedyś może okazać się, że Twój Klient będzie chciał zmienić typ bazy danych na inny, teoretycznie PDO to umożliwia, więc lepiej zamykać kursor, aby uniknąć potencjalnych problemów.

Ten post edytował darko 16.11.2009, 19:17:26
Go to the top of the page
+Quote Post
maro20
post
Post #5





Grupa: Zarejestrowani
Postów: 6
Pomógł: 1
Dołączył: 7.03.2009

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


Cytat(darko @ 16.11.2009, 19:16:07 ) *
Generalnie lepiej używać closeCursor() dla lepszej przenośności pomiędzy różnymi bazami danych...


No i to mi wystarczy dzięki za odpowiedź.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 25.08.2025 - 20:16