Привет, всем. Записываю данные в БД но вместо ПРИВЕТ у меня записывается некая абракадабра. Если использую mysql_query("SET NAMES utf8"); то все норм, но вылетает сообщение что в дальнейшем функция не будет поддерживаться нужно через ООП, через mysqli->query(); не работает. ЧТО Я делаю не так??? как mysql_query("SET NAMES utf8"); переписать через ООП???
Код (PHP): function db_connect() { global $db_host, $db_username, $db_password, $db_database; if (isset($db_host, $db_username, $db_password, $db_database)) { $mysqli = new mysqli("$db_host", "$db_username", "$db_password", "$db_database"); mysql_query("SET NAMES utf8"); if (!$mysqli) throw new Exception('Невозможно подключиться к серверу баз данных: <br />'. $mysqli->connect_error()); else return $mysqli; } else echo "Переменные не существуют! <br /> "; if (!$mysqli->set_charset("utf8")) { printf("Ошибка при загрузке набора символов utf8: %s\n", $mysqli->error); } } *автор, оформляйте, впредь, пожалуйста, код правильно, используя теги. Вы можете нажать "правка" и посмотреть, как они сейчас расставлены.
Автор, вот, теперь так кури: http://php.net/manual/ru/mysqli.set-charset Добавлено спустя 3 минуты 59 секунд: И берем за правило: сначала читаем доки, потом пилим код.
Дики читал. ВСТАВИЛ это код: if (!$mysqli->set_charset("utf8")) { printf("Ошибка при загрузке набора символов utf8: %s\n", $mysqli->error); } else { printf("Текущий набор символов: %s\n", $mysqli->character_set_name()); } результат - зёльки(((
[offtop]Fell-x27, старик, а может ты пройдешься по всем темам где юзается канувший в лету тег PHP: да на нормальный [CODE] его подзаменишь? я понимаю что это быстрее через субд сделать но сколько лет тег не используется - воз и ныне там. а ты править посты можешь. м?[/offtop] [size=2][color=green]Добавлено спустя 8 минут 38 секунд:[/color][/size] kos20, прочитай внимательно логику своего кода global $db_host, $db_username, $db_password, $db_database; - всосали глобальные переменные if (isset($db_host, $db_username, $db_password, $db_database)) - проверили { $mysqli = new mysqli("$db_host", "$db_username", "$db_password", "$db_database"); - создали mysql_query("SET NAMES utf8"); - выполнили ЧТОАААА? ты вроде майскуэли создал а сет неймс через майскуэль делаешь. как оно должно работать? а я тебе расскажу как. поскольку не открыто соединение в устаревшем драйвере то он просто попытается его создать с дефолтными настройками. не сможет. ругнется. но на работу это не повлияет. if (!$mysqli) - если не получилось создать объект подключения throw new Exception('Невозможно подключиться к серверу баз данных: <br />'. $mysqli->connect_error()); - швырнули ошибку else - иначе return $mysqli; - вернули объект подключения. [b]на этом работа функции завершена[/b]. но... читаем дальше. } else -- иначе. это у нас если с переменными беда, ок echo "Переменные не существуют! <br /> "; - да, показали сообщение. в поток. никак не уведомив заказчика о реальном состоянии работы функции. if (!$mysqli->set_charset("utf8")) { - если не удалось выполнить... во-во-воу полехще. мы сюда попали только если? да... [b]переменные не установлены[/b]. следовательно [b]объекта не существует[/b]. следовательно [b]мы не можем выполнить метод несуществующего объекта[/b]. printf("Ошибка при загрузке набора символов utf8: %s\n", $mysqli->error); - и [b]эту ошибку мы видим только если переменных не было[/b] } круто. копипаст - на пять с плюсом. работа головой - неуд.
Можно скрипт написать и запустить от имени модератора, будет тихонько по темам ходить и теги менять, а то вручную мало кто согласится.