2014-07-28 3 views
0

Я создал файл конфигурации, который я включаю в каждый созданный файл. Этот файл конфигурации необходимо использовать для подключения к базе данных без объявления его в каждом файле. Проблема в том, что когда я передаю данные в таблицу с использованием запроса, кодировка повреждается. Я видел несколько онлайн-решений, но был бы способ интегрировать исправление в файле конфигурации? Таким образом, не нужно устанавливать тип кодирования перед каждым запросом. Если я вставляю: «Это тест», вводится в базу данных как: «Этот тест».Проблема с кодировкой в ​​базе данных - PHP

Это мой файл конфигурации

define("HOST", "localhost"); 
define("USER", "root"); 
define("DATABASE", "test"); 
define("PASSWORD", ""); 
define("SET NAMES 'utf8'"); #> you can do something like that? 
+1

Эти 'define' сами по себе ничего не делают. Вам нужен фактический код, который фактически устанавливает соединение, и в этом коде вам нужно установить кодировку соединения. Здесь вам нужно написать 'SET NAMES ...' или что более подходит для вашего API баз данных. Да, вы можете использовать 'define' для определения этой константы здесь, но это не приведет к выполнению какого-либо кода. – deceze

ответ

0

делать и есть символы Юникода в вашей таблице? «SET NAMES« utf8 »необходимо, когда вы хотите отправить данные на сервер с символами, которые не могут быть представлены в чистом ASCII, например« ñ »или« ö ».

что если экземпляр MySQL не настроен ожидать UTF-8 кодировку по умолчанию из клиентских соединений (многие из них, в зависимости от вашего местоположения и платформы.)

Read http://www.joelonsoftware.com/articles/Unicode.html в случае, если вы не знаете, как Unicode работает.

Если вы не уверены, попробуйте удалить последнюю строку из вашего файла конфигурации и попробовать.

0

Прежде всего, вам нужно запустить этот запрос. Однако не очень хорошая идея поставить запрос в определение, а также это определение не имеет никакого имени в коде, который вы нам показали.

Таким образом, вы могли бы сделать это следующим образом:

define("DB_ENCODING", 'utf8'); 

, а затем после соединения с запросом запуска базы данных:

"SET NAMES '".DB_ENCODING."'" 

Однако это еще не самый лучший вариант. Если вы используете MySQLi, например, вы можете использовать вместо mysqli_set_charset() так на самом деле вы можете использовать:

mysqli_set_charset($con, DB_ENCODING); 
+0

Правильный синтакс? "УСТАНОВИТЬ НАЗВАНИЯ" .DB_ENCODING. "'INSERT INTO test (имя, идентификатор, пользователь) VALUES (?,?,?)" – JackIlPazzo

+0

Нет, вы должны запустить только первый запрос SET NAMES только один раз. А затем INSERT INTO (не в том же запросе). Итак, сначала «SET NAMES» .DB_ENCODING. «'» ', А затем' INSERT INTO test (имя, идентификатор, пользователь) VALUES (?,?,?) ' –

+0

Ok mysqli_set_charset ($ con, DB_ENCODING); функция, но я получаю эту ошибку: Примечание: неопределенная переменная и предупреждение: mysqli_set_charset() ожидает, что параметр 1 является mysqli, null given – JackIlPazzo

1

Просто запустите SET запрос NAMES «utf8»; в конструкторе класса после подключения к базе данных. И все же, если у вас все еще есть проблемы с кодировкой, напишите функцию, которая запускает запрос заданий, так что вы можете легко называть его всякий раз, когда вам нужно.

Смежные вопросы