Я использую PHP для заполнения базы данных записей компании. У меня есть поле для названия компании и тип валюты, который они используют.
Но когда я использую PHP, запись никогда не встает, если валюта – знак Enlglish pound (£). Знак доллара ($) или любой другой нормальный символ не является проблемой. Запись с значком фунта вставляется просто отлично, когда я запускаю оператор sql и вводим его непосредственно в MySQL Query Browser. Но это просто не работает, когда я запускаю то же самое заявление INSERT в PHP.
$sql = "INSERT INTO company_test (name, currency) VALUES ('ABC Widgets', '£')"; $rs = mysql_query($sql, $conn); //Does not insert a record $sql = "INSERT INTO company_test (name, currency) VALUES ('ABC Widgets', '$')"; $rs = mysql_query($sql, $conn); //A record inserts just fine //My MySQL version is 5.5.11. PHP is version 5.3.6. //The MySQL table looks like this: TABLE company_test FIELD | id | INTEGER(10) | not null | auto increment FIELD | name | VARCHAR(45) | not null FIELD | currency | VARCHAR(3)
В MySQL Query Browser вкладка «Параметры таблицы» показывает, что для этой таблицы company_test моя кодировка – utf8.
Благодарю.
Проверьте наличие ошибок:
$rs = mysql_query($sql, $conn) or die(mysql_error()); ^^^^^^^^^^^^^^^^^^^^^
Никогда не предполагайте, что запрос будет успешным. Даже если ваш синтаксис SQL идеален, существует слишком много других причин, по которым НЕ МОЖЕТ проверить.
После некоторого Googling я наконец нашел что-то, что сработало. Кто-то с подобным, вероятно, создал функцию PHP, которая преобразует набор символов в оператор sql.
Теперь мой запрос выглядит следующим образом: INSERT INTO company_test (имя, валюта) VALUES ('ABC Widgets', 'Â £') Обратите внимание на забавный маленький персонаж перед значком фунта.
В любом случае здесь функция:
function TtoUtf8( &$string, $encType = 'ISO-8859-1' ) { $enc = mb_detect_encoding( $string ); $enc ? $enc = $enc : $enc = $encType; if ( $enc == 'UTF-8' ) { return $string; // end if $enc == UTF-8 } else { $conv = iconv( $enc, 'UTF-8//TRANSLIT', $string ); $conv ? $ret = &$conv : $ret = &$string; return $ret; }
}
Почему бы вам не преобразовать его сначала в htmlentities или htmlspecialchar:
$currency = htmlspecialchars('£'); $sql = "INSERT INTO company_test (name, currency) VALUES ('ABC Widgets', '{$currency}')";
Кроме того, какой тип данных является полем вашей валюты?