php при добавлении в БД кракозябры

291
26 ноября 2016, 20:10
$connection = new mysqli($dbhost, $dbuser, $dbpass, $dbname);
function queryMysql($query)
{
    global $connection;
    $result = $connection->query($query);
    mysql_set_charset("CP1251");
    if (!$result) die($connection->error);
    return $result;
}
$query = "INSERT INTO `u0163707_megg`.`users` (
`user_id`, `user_status`, `user_email`, `user_pass`, `user_name`, `user_surname`, `user_avatar`)
VALUES (NULL, '2', '$email', '$pass', '$name', '$surname', '/front/img/users/user.png');";
queryMysql($query);
print_r($query);

добавляю записи в бд через ajax. При добавлении запись все русские буквы превращаются в Ðиколай. Кодировка БД utf8_general_ci, как и кодировка всех столбцов, кодировка файла utf8

вывод в консоль запроса выводит:

INSERT INTO 'users' 
  ( 'user_id', 'user_status', 'user_email', 'user_pass', 'user_name', 'user_surname', 'user_avatar') 
VALUES 
  (NULL, '2', 'derzik2010@mail.ru', 'e10adc3949ba59abbe56e057f20f883e', 'Николай', 'Федоров', ' /front/img/users/user.png');
Answer 1

1) Нужно создать таблицу с кодировкой UTF-8:

CREATE TABLE users (...) CHARACTER SET utf8 COLLATE utf8_general_ci;

2) Нужно в начале установить кодировку соединения через:

$connection->query("set names utf8"); 
Answer 2

Вам надо сообщить серверу в какой кодировке работает ваше клиентское приложение. Эта кодировка теоретически может отличаться от кодировки данных в базе, сервер БД сам умеет менять кодировку "на лету".

Если вы используете расширение mysqli, а кодировка веб-страниц UTF-8, то это делается так:

mysqli_set_charset($link, "utf8");

Обратите внимание на отсутствие дефиса между utf и 8 :) А если вдруг ваша веб-страница работает в windows-1251, то делайте так

mysqli_set_charset($link, "cp1251");

Команду надо выполнить один раз сразу после соединения с базой.
Я заметил в вашем коде использование mysql_set_charset (без "i") каждый раз после выполнением запроса — это ошибка, оно не работает и не должно.

Answer 3

Если у вас кодировка UTF-8, то зачем же вы устанавливаете её CP1251?

Answer 4

Вы написали, что отправляете запрос через ajax

Возможно проблема как раз в ajax, попробуйте явно указать scriptCharset: "utf-8" (предполагаю что у вас jquery), а также проверьте кодировку js-файла скрипта и кодировку html-страницы вызывающего данный скрипт

READ ALSO
Вывести имена в алфавитном порядке на каждый лист в excel

Вывести имена в алфавитном порядке на каждый лист в excel

В общем я пытаюсь сгенерировать ексель файл с именами из базы данныхУ меня получилось распечатать и создать листы с каждой буквой алфавита

203
Как вывести пять случайных строк из одной категории?

Как вывести пять случайных строк из одной категории?

Есть таблица с полями id, name, hitВ ней 100 записей

235
OpenCart, где править калькулятор цен товаров?

OpenCart, где править калькулятор цен товаров?

Здравствуйте, девелоперы! На опенкарт, дописываю свой модуль, делаю ручное управление цен, по этому дописовал и переписывал валюту, но калькулятор,...

262