php
  • mysql
  • sql
  • utf-8
  • pdo
  • 2014-01-27 1 views -2 likes 
    -2
    <?php 
        $path    = "mysql:host=localhost;dbname=kanjisearch;charset=utf-8"; 
        $pdo    = new PDO($path, "xxx", "xxx"); 
        $sth    = $pdo->prepare("SELECT * FROM `kanji` WHERE `kanjiName` = '$kanji'"); 
        $sth->execute(); 
        $results   = $sth->fetchAll(); 
    ?> 
    

    Я создаю поиск PHP, в котором используются китайские символы в реальном SQL-запросе, у меня есть -> exec («SET CHARACTER SET utf8»); на pdo. И он отлично выглядит, текст, который я возвращаю, делает charects отличным, если я помещаю числа в sql, но мне нужно искать на основе кандзи, поэтому, когда я запрашиваю WHERE kanji = 一, 一 не кажется пройдите через ok, он отображает на экране отладки, но просто запрашивает запрос, результаты возвращают пустой, но когда я копирую запрос непосредственно в PHPMyAdmin, он возвращает результат.Как получить SQL-запрос с символами UTF-8?

    +0

    SELECT * FROM ' kanji' WHERE' kanjiName' = '一' В в PHPMyAdmin работает просто отлично. Однако это не так, SELECT * FROM 'kanji' WHERE' kanjiName' = '$ kanji' и его то же самое – user3238825

    +1

    Возможно, вам понадобится 'SET NAMES utf8' [как описано в руководстве PDO] (http: // cz1. php.net/manual/en/ref.pdo-mysql.connection.php). До PHP 5.3.6 параметр 'charset' в DNS был проигнорирован. Ну, теперь я заметил, что вы указали 'utf-8'. Попробуйте изменить его на 'utf8' (удалите дефис). MySQL не любит дефисную форму. – Palec

    +0

    Каково определение столбца 'kanji.kanjiName'? Что такое кодировка и сортировка таблицы «кандзи»? Почему бы вам не подготовить запрос с 'WHERE kanjiName =?'? Затем вы будете поставлять '$ кандзи' в' $ sth-> ececute ($ kanji) '. Действительно ли '$ kanji' закодирован в UTF-8? – Palec

    ответ

    -1

    Попробуйте добавить кодировку (Accept-Charset = "UTF-8" и кодировка = UTF-8") к вашей форме и HTML голову:

    <form method="post" action="yourAction" accept-charset="UTF-8"> 
    
    <meta http-equiv="Content-type" content="text/html; charset=utf-8"/> 
    

    EDIT: также взглянуть на этот аналогичный вопрос here . (по shark555)

    $pdo = new PDO( 
        'mysql:host=hostname;dbname=defaultDbName', 
        'username', 
        'password', 
        array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8") 
    ); 
    
    +0

    Я знаю эту часть, эта часть проста, просто разобрав ее на странице. Но однажды на поисковом запросе PHP, чтобы отправить SQL-запрос – user3238825

    +0

    Это совсем не то же самое, что и мой вопрос, он спрашивает об рендеринге, мои рендеринги просто прекрасны. Он просто не запрашивает эти символы. – user3238825

    +0

    Извините за то, что вы сомневаетесь в том, что вы чувак, я прочитал статью больше и да, это было правильно, первый раз я только что скопировал и вложил ее. Надо научиться читать больше, спасибо! – user3238825

    0

    Были ваши таблицы и или столбцы, созданные с помощью UTF-8 набор символов в кодировке по умолчанию? по умолчанию MySQL создает таблицы с латинским на основе набора символов и сопоставить варианты. UTF-8, особенно нет латиных символов, получает искалечен, когда он сохраняется в латинском кодированном столбце ,

    Попробуйте изменить кодировку таблицы, чтобы использовать UTF8, используя команду ALTER table и перезагружая/вставляя ваши данные.

    +0

    Таблицы указаны в UTF-8 – user3238825

    +0

    Что произойдет, если вы передадите $ кандзи в качестве параметра вместо того, чтобы интерполировать его как строку? $ sth = $ pdo-> prepare ("SELECT * FROM' kanji' WHERE 'kanjiName' =?"); $ sth-> execute ($ kanji); – joatis

    +0

    Я тоже так думал, нет радости. – user3238825

    -1

    $ kanji необходимо обрабатывать как особый набор символов. , так что то, что набрано, скорее всего, не будет выглядеть как кодированная строка UTF-8. вам нужно справиться с этим.

    примечание: http://www.fileformat.info/info/unicode/char/4e00/index.htm

    в основном вы хотите преобразовать в UTF-8. но попробуйте это: http://us1.php.net/mb_convert_encoding

    как

    • mb_convert_encoding ($ текст, 'UTF-8');
    • или если вы знаете кодировку языковой палочки как 3-й параметр.
    • или попробуйте auto: mb_convert_encoding ($ text, 'UTF-8', 'auto');
    +0

    Это не сработало – user3238825

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