Кириллические символы в запросе INSERT - PullRequest
6 голосов
/ 04 июня 2011
$dblocation = "localhost";
$dbname = "xx";
$dbuser = "xx";
$dbpasswd = "xx";
$dbcnx = @mysql_connect($dblocation,$dbuser,$dbpasswd);
mysql_select_db($dbname, $dbcnx);
mysql_query("SET NAMES utf8");
mysql_query("SET COLLATION_CONNECTION=utf8_bin"); 
$name = mysql_real_escape_string($name);
$about = mysql_real_escape_string($about);
mysql_query("INSERT INTO votes 
(name, about, active) VALUES('".$name."', '".$about."', 1 ) ") 
or die(mysql_error());

Отлично работает, когда $ name и $ about не кириллические. Но когда это кириллица - скрипт просто добавляет строку с пустым именем и о полях. Что делать?
DB - UTF-8, ручное добавление строк с помощью phpMyAdmin с кириллическими символами работает отлично, PHP-скрипт - UTF-8, все UTF-8.

Ответы [ 3 ]

3 голосов
/ 14 июля 2011

Вы должны иметь:

1. header ("Content-Type: text/html; charset=utf-8"); или <meta http-equiv="content-type" content="text/html; charset=utf-8" />

2.mysql_query ("SET NAMES 'utf8'");

3.Setкодировка вашего файла в utf-8 без спецификации

0 голосов
/ 14 июля 2011

Я много имел дело с кириллицей, и это действительно сложно. До сих пор в моем опыте я не использовал COLLATION_CONNECTION. Все, что я делаю, это помещаю, как и вы, все возможные файлы в utf8. Затем поля в БД я помещаю в "utf8_unicode_ci" и использую только параметры SET NAMES для установки кодировки соединения. Этого должно быть достаточно. Имейте в виду, что имена Set могут быть хитрыми, так как только один лишний пробел, и он не будет работать. Я использую:

define("DBENCODING", "utf8");
mysql_query("SET NAMES '".DBENCODING."'", $this->connection);

Надеюсь, мне удалось помочь.

0 голосов
/ 04 июня 2011

Укажите набор символов, который должен использоваться соединением с mysql_set_charset(...'). Смотри http://php.net/manual/en/function.mysql-set-charset.php.

...