Вставьте php иврит var в mysql

У меня есть этот код

$myname="דוגמא";
$sql="insert into tbl_users values (" . $myname . ")";
$command = $con->prepare($sql);
$command->execute()

теперь, если я напишу $myname как это

$myname="\'דוגמא\'";

это работает хорошо, иначе результаты в БД выглядят ??? или бред.

БД, таблица и столбцы настроены на «иврит».

Теперь мой вопрос: как я могу сделать это обычным способом, а не как с косыми чертами?

-1

Решение

Хранилище данных:

  • Укажите utf8mb4 набор символов для всех таблиц и текстовых столбцов в вашей базе данных. Это заставляет MySQL физически хранить и извлекать значения, изначально закодированные в UTF-8. Обратите внимание, что MySQL будет неявно использовать utf8mb4 кодирование, если utf8mb4_* указано сопоставление (без какого-либо явного набора символов).

  • В старых версиях MySQL (< 5.5.3), к сожалению, вы будете вынуждены использовать просто utf8, который поддерживает только подмножество символов Unicode. Я хотел бы шутить.

Доступ к данным:

  • В коде вашего приложения (например, PHP), в каком бы методе доступа к БД вы ни использовали, вам нужно установить кодировку соединения в utf8mb4, Таким образом, MySQL не выполняет преобразование из собственного UTF-8, когда передает данные в ваше приложение, и наоборот.

  • Некоторые драйверы предоставляют свой собственный механизм для настройки набора символов соединения, который одновременно обновляет свое собственное внутреннее состояние и сообщает MySQL о кодировке, которая будет использоваться в соединении — обычно это предпочтительный подход. В PHP:

    • Если вы используете PDO слой абстракции с PHP ≥ 5.3.6, вы можете указать charset в DSN:

      $dbh = new PDO('mysql:charset=utf8mb4');
      
    • Если вы используете MySQLi, ты можешь позвонить set_charset():

      $mysqli->set_charset('utf8mb4');       // object oriented style
      mysqli_set_charset($link, 'utf8mb4');  // procedural style
      
    • Если вы застряли с равниной MySQL но, случается, работает PHP ≥ 5.2.3, вы можете позвонить mysql_set_charset.

  • Если драйвер не предоставляет свой собственный механизм для установки набора символов соединения, вам может потребоваться выполнить запрос, чтобы сообщить MySQL, как ваше приложение ожидает, что данные в соединении будут закодированы: SET NAMES 'utf8mb4'.

  • То же самое в отношении utf8mb4/utf8 применяется как указано выше.

Выход:

  • Если ваше приложение передает текст в другие системы, они также должны быть проинформированы о кодировке символов. В веб-приложениях браузер должен быть проинформирован о кодировке, в которой отправляются данные (через заголовки ответа HTTP или Метаданные HTML).

  • В PHP вы можете использовать default_charset php.ini или вручную введите Content-Type MIME заголовок самостоятельно, который просто больше работы, но имеет тот же эффект.

вход:

  • К сожалению, вы должны проверить каждую полученную строку как действительную UTF-8, прежде чем пытаться сохранить ее или использовать где-либо. РНР mb_check_encoding() делает трюк, но вы должны использовать это религиозно. Это действительно невозможно, поскольку злонамеренные клиенты могут отправлять данные в любой нужной им кодировке, и я не нашел способа заставить PHP сделать это для вас надежно.

  • Из моего чтения текущего HTML спецификация, Следующие подпункты больше не нужны и даже не действительны для современного HTML. Насколько я понимаю, браузеры будут работать и отправлять данные в наборе символов, указанном для документа. Однако, если вы ориентируетесь на более старые версии HTML (XHTML, HTML4 и т. Д.), Эти пункты могут быть полезны:

    • Только для HTML до HTML5: вы хотите, чтобы все данные, отправленные вам браузерами, были в UTF-8. К сожалению, если вы выберете единственный способ надежно это сделать, это добавить accept-charset приписать всем своим <form> теги: <form ... accept-charset="UTF-8">,
    • Только для HTML до HTML5: обратите внимание, что спецификация W3C HTML гласит, что клиенты «должны» по умолчанию отправлять формы обратно на сервер в любой кодировке, которую обслуживал сервер, но это, по-видимому, только рекомендация, поэтому необходимо указывать явное в каждом <form> тег.

Другие соображения по коду:

  • Очевидно, что все файлы, которые вы будете обслуживать (PHP, HTML, JavaScript и т. Д.), Должны быть закодированы в допустимом UTF-8.

  • Вы должны убедиться, что каждый раз, когда вы обрабатываете строку UTF-8, вы делаете это безопасно. Это, к сожалению, самая сложная часть. Вы, вероятно, захотите широко использовать PHP mbstring расширение.

  • PHP встроенные строковые операции не по умолчанию сейф UTF-8. Есть некоторые вещи, которые вы можете безопасно делать с обычными строковыми операциями PHP (например, конкатенация), но для большинства вещей вы должны использовать эквивалентные mbstring функция.

  • Чтобы знать, что вы делаете (читай: не путайте), вам действительно нужно знать UTF-8 и как он работает на самом низком уровне. Проверьте любую из ссылок с utf8.com для некоторых хороших ресурсов, чтобы узнать все, что вам нужно знать.

Источник

Смотрите это также

0

Другие решения

Вы пытаетесь вставить строку. В SQL строки должны быть заключены в кавычки: INSERT INTO tbl_name (field_name) VALUES ("string surrounded by quotation marks");,

Пожалуйста, рассмотрите возможность использования подходящего уровня абстракции базы данных, такого как PDO, или, что еще лучше, полнофункционального решения, такого как Doctrine.

1

использование UTF-8, когда ты СОЗДАЙТЕ Таблица.

create table table_name () CHARACTER SET = utf8;

использование UTF-8, когда ты ВСТАВИТЬ к столу

set username utf8; INSERT INTO table_name (ABC,VAL);

Вы можете прочитать подробно из Вот

Также проверьте ваше соединение, оно должно быть в utf-8,

Например:

$link = mysql_connect('localhost', 'username', 'password');
mysql_set_charset('utf8',$link);
0