Является ли mysqli bind_param виновником?Не удается сохранить специальные символы, такие как € - PullRequest
1 голос
/ 20 ноября 2011

Я пытаюсь создать несколько страниц, используя PHP / MySQL.

Моя таблица базы данных установлена ​​на utf8_general_ci, как и столбцы таблицы.Если я использую phpmyadmin и вручную вставляю страницу, я могу ввести все нужные мне €, и они будут вставлены как €.Я тоже могу это прекрасно отобразить.

Однако, когда я пытаюсь вставить страницу, используя mysqli, € будет конвертирован в «1006 *

». Я не делаю никаких преобразований.Если я отображаю поля столбца страницы непосредственно перед тем, как собираюсь вставить страницу, он все равно правильно отображает €.

Код:

$connection = new mysqli('localhost', 'root', '', 'some_db');

$query  = 'INSERT INTO page (ID, title, content) VALUES (?, ?, ?)';
$params = array('iss', 'NULL', 'test title', '€ some content');

$stmt = $connection->prepare($query);

call_user_func_array(array($stmt, 'bind_param'), by_ref($params));

$stmt->execute();

Функция by_ref дает только ссылку, ничего больше.Все работает хорошо, за исключением того, что у меня болит голова, когда он неправильно вставляет €.Может быть, это не bind_param, а что-то еще.Однако я хотел бы знать ответ!

Обновление:

Благодаря Digital Precision я понял, что должен убедиться, что соединение будет использовать utf8».Однако мне нужно установить его только при использовании INSERT или UPDATE, поскольку SELECT действительно возвращает результаты в utf8.Надеюсь, это кому-нибудь поможет

1 Ответ

3 голосов
/ 20 ноября 2011

PHPMyAdmin может явно устанавливать кодировку соединения в UTF-8, поэтому он может работать через интерфейс администратора, а не через ваш скрипт.Проверьте mysqli :: set_charset для получения более подробной информации.

$connection->set_charset('utf8');

Редактировать

Попробуйте отключить функцию call_user_:

$connection = new mysqli('localhost', 'root', '', 'some_db');

$query  = 'INSERT INTO page (ID, title, content) VALUES (?, ?, ?)';
//$params = array('iss', 'NULL', 'test title', '€ some content');

$stmt = $connection->prepare($query);

// Replace this
//call_user_func_array(array($stmt, 'bind_param'), by_ref($params));

// With this
$stmt->bind_param('iss', 'NULL', 'test title', '€ some content'); 

$stmt->execute();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...