Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][PDO][MySQL] closeCursor() czy wymagany?
Forum PHP.pl > Forum > Przedszkole
maro20
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>';


darko
W niektórych przypadkach (driver-specific) zwiększa wydajność, zresztą wszystko jest tu: http://www.php.net/manual/en/pdostatement.closecursor.php
maro20
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.
darko
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.
maro20
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ź.
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-2024 Invision Power Services, Inc.