За последние 24 часа нас посетили 17505 программистов и 1650 роботов. Сейчас ищут 895 программистов ...

Старо как мир: зюльки в БД вместо ПРИВЕТ!

Тема в разделе "PHP для новичков", создана пользователем kos20, 13 мар 2015.

  1. kos20

    kos20 Новичок

    С нами с:
    9 янв 2015
    Сообщения:
    21
    Симпатии:
    0
    Привет, всем. Записываю данные в БД но вместо ПРИВЕТ у меня записывается некая абракадабра. Если использую mysql_query("SET NAMES utf8"); то все норм, но вылетает сообщение что в дальнейшем функция не будет поддерживаться нужно через ООП, через mysqli->query(); не работает. ЧТО Я делаю не так??? как mysql_query("SET NAMES utf8"); переписать через ООП???
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    в мануале что написано? и как при этом выглядит код который не работает?
     
  3. kos20

    kos20 Новичок

    С нами с:
    9 янв 2015
    Сообщения:
    21
    Симпатии:
    0
    Код (PHP):
    1. function db_connect() 
    2. {
    3.   global $db_host, $db_username, $db_password, $db_database;
    4.   
    5.   if (isset($db_host, $db_username, $db_password, $db_database))
    6.   {
    7.  
    8.     $mysqli = new mysqli("$db_host", "$db_username", "$db_password", "$db_database");
    9.     mysql_query("SET NAMES utf8");
    10.  
    11.         if (!$mysqli) 
    12.            throw new Exception('Невозможно подключиться к серверу баз данных: <br />'. $mysqli->connect_error());
    13.         else
    14.            return $mysqli;
    15.   } 
    16.   else
    17.     echo "Переменные не существуют! <br /> ";
    18.  
    19.   if (!$mysqli->set_charset("utf8")) {
    20.     printf("Ошибка при загрузке набора символов utf8: %s\n", $mysqli->error);
    21.     }
    22.  
    23.  
    24. }
    *автор, оформляйте, впредь, пожалуйста, код правильно, используя теги. Вы можете нажать "правка" и посмотреть, как они сейчас расставлены.
     
  4. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Автор, вот, теперь так кури: http://php.net/manual/ru/mysqli.set-charset

    Добавлено спустя 3 минуты 59 секунд:
    И берем за правило: сначала читаем доки, потом пилим код.
     
  5. kos20

    kos20 Новичок

    С нами с:
    9 янв 2015
    Сообщения:
    21
    Симпатии:
    0
    Дики читал. ВСТАВИЛ это код: if (!$mysqli->set_charset("utf8")) {
    printf("Ошибка при загрузке набора символов utf8: %s\n", $mysqli->error);
    } else {
    printf("Текущий набор символов: %s\n", $mysqli->character_set_name());
    }

    результат - зёльки(((
     
  6. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    [offtop]Fell-x27, старик, а может ты пройдешься по всем темам где юзается канувший в лету тег
    PHP:
    1.  да на нормальный [CODE] его подзаменишь? я понимаю что это быстрее через субд сделать но сколько лет тег не используется - воз и ныне там. а ты править посты можешь. м?[/offtop]
    2.  
    3. [size=2][color=green]Добавлено спустя 8 минут 38 секунд:[/color][/size]
    4. kos20, прочитай внимательно логику своего кода
    5. global $db_host, $db_username, $db_password, $db_database; - всосали глобальные переменные
    6.  
    7.   if (isset($db_host, $db_username, $db_password, $db_database)) - проверили
    8.   {
    9.  
    10.     $mysqli = new mysqli("$db_host", "$db_username", "$db_password", "$db_database");  - создали
    11.     mysql_query("SET NAMES utf8"); - выполнили ЧТОАААА? ты вроде майскуэли создал а сет неймс через майскуэль делаешь. как оно должно работать? а я тебе расскажу как. поскольку не открыто соединение в устаревшем драйвере то он просто попытается его создать с дефолтными настройками. не сможет. ругнется. но на работу это не повлияет.
    12.  
    13.         if (!$mysqli) - если не получилось создать объект подключения
    14.            throw new Exception('Невозможно подключиться к серверу баз данных: <br />'. $mysqli->connect_error()); - швырнули ошибку
    15.         else - иначе
    16.            return $mysqli; - вернули объект подключения. [b]на этом работа функции завершена[/b]. но... читаем дальше.
    17.   }
    18.   else -- иначе. это у нас если с переменными беда, ок
    19.     echo "Переменные не существуют! <br /> "; - да, показали сообщение. в поток. никак не уведомив заказчика о реальном состоянии работы функции.
    20.  
    21.   if (!$mysqli->set_charset("utf8")) { - если не удалось выполнить... во-во-воу полехще. мы сюда попали только если? да... [b]переменные не установлены[/b]. следовательно [b]объекта не существует[/b]. следовательно [b]мы не можем выполнить метод несуществующего объекта[/b].
    22.     printf("Ошибка при загрузке набора символов utf8: %s\n", $mysqli->error); - и [b]эту ошибку мы видим только если переменных не было[/b]
    23.  
    24.     }
    25.  
    26. круто. копипаст - на пять с плюсом. работа головой - неуд.
     
  7. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Можно скрипт написать и запустить от имени модератора, будет тихонько по темам ходить и теги менять, а то вручную мало кто согласится.