PDO Exception 1366...

Ярослав

Новичок
PDO Exception 1366...

Здравствуйте
При вставке данных в базу возникает еxception но только если передаю в кирилице. Если в латинице то все ок
PHP:
Zend_Db_Statement_Exception: SQLSTATE[HY000]: General error: 1366 
Incorrect string value: '\xF4\xFB\xE2\xE0\xF4\xFB...' for column 'login' at row 1 
in C:\www\project\ZendFramework-1.0.3\library\Zend\Db\Statement\Pdo.php on line 227
Мой код
PHP:
....
Создаю подключение
$db = Zend_Db::factory($config->db->adapter, $config->db->config->toArray());
Zend_Db_Table_Abstract::setDefaultAdapter($db);
Zend_Registry::set('db', $db);
$db->query('SET names utf8');
$db->query('SET character set utf8');
....
Создаю класс таблицы
PHP:
<?php
class User_UsersTable extends Zend_Db_Table 
{
    
    protected $_name = 'users';
    
    
}
Делаю вставку данных
//$data['login'] содержит подобие "фвафыва"
PHP:
$userTable = new User_UsersTable();
        $compareData = array(
            'login'         => $data['login'],
            'password'      => md5($data['password']),
             ....
        ); 
        return $userTable->insert($compareData);
Подскажите как исправить эту ошибку.

-~{}~ 23.01.08 09:44:

Протестировал под линукс работает.
Наверное все-таки проблема с кодировками соединения или в PDO можно задать кодировку...
Вопрос остается открытым

-~{}~ 23.01.08 10:37:

PHP:
<?php
$options = array(
    Zend_Db::AUTO_QUOTE_IDENTIFIERS => false
);

$params = array(
    'host'           => '127.0.0.1',
    'username'       => 'webuser',
    'password'       => 'xxxxxxxx',
    'dbname'         => 'test',
    'options'        => $options
);

$db = Zend_Db::factory('Pdo_Mysql', $params);
Скорее всего это было проблема из-за того что автоматически не "кавычились" данные
ё маё
Значения и идентификаторы в SQL-выражении не заключаются в кавычки автоматически. Если имеются значения или идентификаторы, которые требуют заключения в кавычки, то вы должны произвести его сами. Используйте методы quote(), quoteInto() и quoteIdentifier() адаптера БД.
-~{}~ 24.01.08 00:46:

Протестировал сегодня еще раз на винде.
Если кодировка страницы utf-8 то данные записываются в базу нормально. Но если например выставить кодировку в браузере cp-1251 то выбрасывается исключение 1366...
Кто нибудь сталкивался с подобным? Как с этим бороться?
 

Ярослав

Новичок
Автор оригинала: Azy
SET NAMES ?
смотрите внимательно код

-~{}~ 24.01.08 10:40:

тестирую еще раз под линукс (имеется виду, что сервер на линукс)
тут что интерестно когда переключаюсь на кодировку в браузере cp1251 то exception уже не вылетает (только в linux, в винде выдает exception) но там где ломаная кодировка вставляет пустые строки в varchar. А если указать поле блоб то работает нормально

тоисть показивает ломаную кодировку, кот. была задана в INSERT
Получается что когда работаем через PDO он наверное смотрит совпадают ли данные с типом поля и если все ок то вставляет.
'lastname' => string '&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;&#65533;' (length=11)
 
Сверху