Как сохранить цитаты в базе данных MySQL - PullRequest
1 голос
/ 29 июля 2011

Всякий раз, когда я добавляю одинарную кавычку (') или двойную кавычку (") в моем поле формы PHP, она будет сохранена в моей БД MySQL как " / '. Как сохранить« настоящие »кавычки "в моей БД?

Я пытался предотвратить это, установив безопасное соединение Mysql через PDO, но, похоже, оно не работает должным образом.

Итак, вот важная часть моего кода:

    $insert_hello = filter_var($_POST['hello'], FILTER_SANITIZE_STRING);
    $dbh->query("SET NAMES 'utf8'");
    $stmt = $dbh->prepare("INSERT INTO testtable (data) VALUES (:hello)");
    $stmt->bindParam(':hello', $insert_hello, PDO::PARAM_STR);      
    $stmt->execute();

Некоторая справочная информация:

Сервер работает на PHP v5.2.12-0.

Механизм DBStorage - InnoDB, и его кодировка клиента, соединения, результатов и системы установлена ​​в utf8.

Для поля БД установлено сопоставление utf8_unicode_ci.

Магические кавычки отключены через .htaccess.

Заранее спасибо!

С уважением, Jroen

Ответы [ 3 ]

0 голосов
/ 29 июля 2011

Вы можете использовать функцию php $decoded_insert_hello = html_entity_decode($insert_hello, ENT_QUOTES), чтобы сделать это.

http://www.php.net/manual/en/function.html-entity-decode.php

0 голосов
/ 29 июля 2011

Хорошо, просто чтобы формализовать правильный ответ:

Проблема вызвана filter_var(), который преобразует некоторые символы в объекты HTML.Нет необходимости вручную очищать данные, так как PDO сделает это за вас.

Вы можете просто написать что-то вроде этого, которое должно работать очень хорошо:

$dbh->query("SET NAMES 'utf8'");
$stmt = $dbh->prepare("INSERT INTO testtable (data) VALUES (:hello)");
$stmt->bindParam(':hello', $_POST['hello'], PDO::PARAM_STR);      
$stmt->execute();
0 голосов
/ 29 июля 2011

Лучше всего оставить все как есть и html-декодирование при чтении.

...