Witam,
Niedawno postanowiłem przerobic swój skrypt tak, aby używał PDO.
Napotkałem jednak problem z kodowaniem.
Stara funkcja:
<?php
header('Content-Type: text/html; charset=utf-8'); //---------------------------
// Database connection
//---------------------------
if (!($conn = mysql_connect($db_hostname, $db_username, $db_password))) { print("$LANG[db_connect_error]"); error_log("$LANG[db_connect_error]\r\n", 3, '../log/db.log'); }
//---------------------------
// Database encoding
//---------------------------
mysql_set_charset('utf8', $conn);
//---------------------------
// Database selecting
//---------------------------
print $LANG['db_select_error']; error_log("$LANG[db_select_error]\r\n", 3, '../log/db.log'); }
if (!($query1 = mysql_query("SELECT Answer FROM `Answers` WHERE ID_lvl=$_SESSION[actual_lvl]"))) { print $LANG['db_query_error']; error_log("$LANG[db_query_error]\r\n", 3, 'log/db.log'); }
$result[] = $row['Answer'];
}
?>
Nowa z PDO:
<?php
header('Content-Type: text/html; charset=utf-8');
try
{
$pdo = new PDO("mysql:host=$db_hostname;dbname=$db_name;charset=UTF8", $db_username, $db_password);
$pdo -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo -> setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES UTF8");
$actual_lvl = 2;
$sql = 'SELECT Answer FROM `Answers` WHERE ID_lvl=:actual_lvl';
$stmt = $pdo -> prepare($sql);
$stmt ->execute(array(':actual_lvl'=>$actual_lvl));
foreach($stmt as $row)
{
}
$stmt -> closeCursor();
}
catch(PDOException $e)
{
echo 'Połączenie nie mogło zostać utworzone: ' . $e->getMessage(); }
?>
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