Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL][PDO]Zamiana mysql_* na PDO
Forum PHP.pl > Forum > Przedszkole
mlawnik
Witam,

Niedawno postanowiłem przerobic swój skrypt tak, aby używał PDO.

Napotkałem jednak problem z kodowaniem.

Stara funkcja:
  1. <?php
  2. header('Content-Type: text/html; charset=utf-8');
  3. //---------------------------
  4. // Database connection
  5. //---------------------------
  6. if (!($conn = mysql_connect($db_hostname, $db_username, $db_password))) {
  7. print("$LANG[db_connect_error]");
  8. error_log("$LANG[db_connect_error]\r\n", 3, '../log/db.log');
  9. }
  10. //---------------------------
  11. // Database encoding
  12. //---------------------------
  13. mysql_set_charset('utf8', $conn);
  14. //---------------------------
  15. // Database selecting
  16. //---------------------------
  17. if (!($db = mysql_select_db($db_name, $conn))) {
  18. print $LANG['db_select_error'];
  19. error_log("$LANG[db_select_error]\r\n", 3, '../log/db.log');
  20. }
  21. if (!($query1 = mysql_query("SELECT Answer FROM `Answers` WHERE ID_lvl=$_SESSION[actual_lvl]"))) {
  22. print $LANG['db_query_error'];
  23. error_log("$LANG[db_query_error]\r\n", 3, 'log/db.log');
  24. }
  25. while ($row = mysql_fetch_array($query1, MYSQL_BOTH)) {
  26. $result[] = $row['Answer'];
  27. }
  28.  
  29. echo $result;
  30. ?>


Nowa z PDO:
  1. <?php
  2. header('Content-Type: text/html; charset=utf-8');
  3.  
  4. ini_set('display_errors', '1');
  5.  
  6. try
  7. {
  8. $pdo = new PDO("mysql:host=$db_hostname;dbname=$db_name;charset=UTF8", $db_username, $db_password);
  9. $pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  10. $pdo -> setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES UTF8");
  11. $actual_lvl = 2;
  12. $sql = 'SELECT Answer FROM `Answers` WHERE ID_lvl=:actual_lvl';
  13. $stmt = $pdo -> prepare($sql);
  14. $stmt ->execute(array(':actual_lvl'=>$actual_lvl));
  15.  
  16. foreach($stmt as $row)
  17. {
  18. echo $row['Answer'];
  19. }
  20.  
  21. $stmt -> closeCursor();
  22.  
  23. }
  24. catch(PDOException $e)
  25. {
  26. echo 'Połączenie nie mogło zostać utworzone: ' . $e->getMessage();
  27. }
  28. ?>


Kodowanie w bazie jest ok.(utf8_general)

Wynik w przeglądarce:

1-sza funkcja:
kałasznikow

2-ga funkcja:
ka?asznikow

Ma ktoś jakieś pomysły?

Pozdrawiam,
mlawnik
cycofiasz
Daj po $db_password taki kod:

  1. ,array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8")


a tan kod usuń:
  1. $pdo -> setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES UTF8");
mlawnik
Dzięki, pomógł leci.

Temat do zamknięcia.
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.