Не могу понять куда всавлять код, который приводят в других темах.
Собственно по моей проблеме:
При выводе списка из mysql (всё происходит с помощью PHP PDO) кириллица заменяется знаками "?????".
В PhpMyAdmin поменял кодировку на cp1251_general_ci (вкладка Сравнение).
На главной странице кириллица отображается нормально, только строки из mysql криво.
Подскажите как исправить мой пример
Ниже листинг php файла который работает с mysql
<?php
class DatabaseHandler
{
private static $_mHandler;
private function _construct()
{
}
private static function GetHandler()
{
if (!isset(self::$_mHandler))
{
try
{
self::$_mHandler =
new PDO('mysql:host=localhost;dbname=tshirtshop', 'tshirtshopadmin', 'tshirtshopadmin',
array(PDO::ATTR_PERSISTENT => 'true'));
self::$_mHandler->setAttribute(PDO::ATTR_ERRMODE,
PDO::ERRMODE_EXCEPTION);
}
catch (PDOException $e)
{
self::Close();
trigger_error($e->getMessage(), E_USER_ERROR);
}
}
return self::$_mHandler;
}
public static function Close()
{
self::$_mHandler = null;
}
public static function Execute($sqlQuery, $params = null)
{
try
{
$database_handler = self::GetHandler();
$statement_handler = $database_handler->prepare($sqlQuery);
$statement_handler->execute($params);
}
catch(PDOException $e)
{
self::Close();
trigger_error($e->getMessage(), E_USER_ERROR);
}
}
public static function GetAll($sqlQuery, $params = null, $fetchStyle = PDO::FETCH_ASSOC)
{
$result = null;
try
{
$database_handler = self::GetHandler();
$statement_handler = $database_handler->prepare($sqlQuery);
$statement_handler->execute($params);
$result = $statement_handler->fetchAll($fetchStyle);
}
catch(PDOException $e)
{
self::Close();
trigger_error($e->getMessage(), E_USER_ERROR);
}
return $result;
}
public static function GetRow($sqlQuery, $params = null, $fetchStyle = PDO::FETCH_ASSOC)
{
$result = null;
try
{
$database_handler = self::GetHandler();
$statement_handler = $database_handler->prepare($sqlQuery);
$statement_handler->execute($params);
$result = $statement_handler->fetch($fetchStyle);
}
catch(PDOException $e)
{
self::Close();
trigger_error($e->getMessage(), E_USER_ERROR);
}
return $result;
}
public static function GetOne($sqlQuery, $params = null)
{
$result = null;
try
{
$database_handler = self::GetHandler();
$statement_handler = $database_handler->prepare($sqlQuery);
$statement_handler->execute($params);
$result = $statement_handler->fetch(PDO::FETCH_NUM);
$result = $result[0];
}
catch(PDOException $e)
{
self::Close();
trigger_error($e->getMessage(), E_USER_ERROR);
}
return $result;
}
}
?>
Спустя 5 минут, 56 секунд (22.12.2010 - 11:32) divine266 написал(а):
при соединении с базой
в данном случае ютф поставь какую надо
mysql_set_charset("utf8", $db);
в данном случае ютф поставь какую надо
Спустя 3 минуты, 9 секунд (22.12.2010 - 11:36) divine266 написал(а):
у тебя кирилица я так понял, в твоем случае будет
mysql_set_charset("cp1251", $db);
Спустя 22 минуты, 6 секунд (22.12.2010 - 11:58) Гость_Дмитрий написал(а):
Подскажите в какую часть кода из приведенного листинга вставить эту функцию
Спустя 1 час, 14 минут, 41 секунда (22.12.2010 - 13:12) ИНСИ написал(а):
Гость_Дмитрий выложи класс: new PDO. Нужен файл который делает запросы в БД
Спустя 51 минута, 41 секунда (22.12.2010 - 14:04) Гость_Дмитрий написал(а):
Ниже выкладываю листинг файла config.php (жирным шрифтом выделил строки (методы PDO), которые обеспечивают выполнение запросов к БД)
запросы выполняет файл catalog.php
<?php
define('SITE_ROOT', dirname(dirname(_FILE_)));
define('BUSINESS_DIR', SITE_ROOT . '/business/');
define('SMARTY_DIR', SITE_ROOT . '/libs/smarty/');
define('TEMPLATE_DIR', PRESENTATION_DIR . 'templates');
define('COMPALE_DIR', PRESENTATION_DIR . 'templates_c');
define('CONFIG_DIR', SITE_ROOT . '/include/configs');
define('IS_WARNING_FATAL', true);
define('DEBUGGING', false);
define('ERROR_TYPES', E_ALL);
define('SEND_ERROR_MAIL', false);
define('ADMIN_ERROR_MAIL', 'jarskii2009@gmail.com');
define('SENDMAIL_FROM', 'Errors@examples.com');
ini_set('sendmail_from', SENDMAIL_FROM);
define('LOG_ERROR', false);
define('LOG_ERROR_FILE', 'c:\\tshirtshop\\errors_log.txt');
define('SITE_GENERIC_ERROR_MESSAGE', '<h1>TShirtShop Error!</h1>');
[b]define('DB_PERSISTENCY', 'true');
define('DB_SERVER', 'localhost');
define('DB_USERNAME', 'tshirtshopadmin');
define('DB_PASSWORD', 'tshirtshopadmin');
define('DB_DATABASE', 'tshirtshop');
define('PDO_DSN', 'mysql:host=' . DB_SERVER . ';dbname=' . DB_DATABASE);[/b]
define('VIRTUAL_LOCATION', '/tshirtshop/');
?>
запросы выполняет файл catalog.php
<?php
class Catalog
{
public static function GetDepartments()
{
$sql = 'CALL catalog_get_departments_list()';
return DatabaseHandler::GetAll($sql);
}
}
?>
Спустя 1 минута, 29 секунд (22.12.2010 - 14:06) Гость_Дмитрий написал(а):
Прошу прощения, жирным не далось сделать:) между тегами "[b][/b]"
Спустя 23 минуты, 24 секунды (22.12.2010 - 14:29) ИНСИ написал(а):
Гость_Дмитрий нужен файл, который непосредственно делает запрос к БД. Видимо, надо будет добавить еще 1 константу (с кодировкой к БД) и добавить в класс, который делает запрос к БД...
Спустя 15 минут, 5 секунд (22.12.2010 - 14:44) Гость_Дмитрий написал(а):
Фух, удалось разобраться..
В самом первом выложенном листинге, после строки
self::$_mHandler = new PDO('mysql:host=localhost;dbname=tshirtshop', 'tshirtshopadmin', 'tshirtshopadmin', array(PDO::ATTR_PERSISTENT => 'true'));
нужно было добавить
self::$_mHandler->exec('SET NAMES cp1251');
спасибо за помощь!
В самом первом выложенном листинге, после строки
self::$_mHandler = new PDO('mysql:host=localhost;dbname=tshirtshop', 'tshirtshopadmin', 'tshirtshopadmin', array(PDO::ATTR_PERSISTENT => 'true'));
нужно было добавить
self::$_mHandler->exec('SET NAMES cp1251');
спасибо за помощь!
Спустя 19 минут, 7 секунд (22.12.2010 - 15:03) ИНСИ написал(а):
Гость_Дмитрий или так
мы же не видим ваши файлы все ![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)
![smile.gif](http://phpforum.ru/html/emoticons/smile.gif)