двойные кавычки сохраняются как "e; в mysql при сохранении с использованием php pdo - PullRequest
0 голосов
/ 13 января 2020
try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $sql = "UPDATE table_name SET name=:name where id=1";

    $stmt = $conn->prepare($sql);
    $stmt->execute(['name'=>'dsf"fsd"fds']);

}catch(PDOException $e){
    echo $sql . "<br>" . $e->getMessage();
}

$conn = null;

с этим кодом name сохраняется как dsf&quote;fsd&quote;fds в mysql базе данных

с laravel, если я сохраняю name, он будет сохраняться как dsf"fsd"fds.

почему php сохраняет его по-другому, и как сохранить его, используя php pdo. Пожалуйста, поделитесь кодом.

Ответы [ 2 ]

0 голосов
/ 06 февраля 2020

Это была моя ошибка

На самом деле проблем с кодом не было. этот код не добавляет &quote; в sql базу данных.

У меня была функция для форматирования ввода в sql запрос

public function test_input($data) {
      $data = trim($data);
      $data = stripslashes($data);
      $data = htmlspecialchars($data);
      return $data;
}

эта функция имела htmlspecialchars функцию, которая преобразовывала двойные кавычки в &quote; в базе данных.

0 голосов
/ 13 января 2020

На самом деле экранирование требуется только для строк SQL. Это не имеет никакого отношения к PDO, подготовленным заявлениям, безопасности и тому подобному. Как только вы собираетесь вставить строковый литерал в запрос - на него должны быть экранированы специальные символы. Но как только вы этого не сделаете - никакого экранирования не будет хорошо.

Что касается PDO, вы хотите, чтобы он не "экранировал", а обрабатывал заполнители в вашем запросе. Вот как все это работает. Используя заполнители, вы указываете PDO правильно форматировать соответствующие значения. Хотя такое форматирование включает в себя не просто экранирование, а множество других мер.

Приведенная выше информация взята из этого ответа .

Только для вашей информации, что следующие символы single quote, double quote, null byte и backslash являются злом для запроса sql:

', ", \0, \
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...