Я только начинаю с методов PDO, и теперь я застрял в небольшом вопросе. Если я создаю форму, чтобы вставить имя и фамилию в базу данных я могу вставить все типы специальных символов на код ниже:PDO UPDATE, похоже, не сохраняет кавычки?
try {
$db = new PDO('mysql:dbhost=' . $dbhost . ';dbname=' . $dbname, $dbuser, $dbpass);
$db -> exec("SET CHARACTER SET utf8");
} catch(PDOException $e) {
echo $e->getMessage();
}
$query = $db->prepare("INSERT INTO users(fname, lname) VALUES(:fname, :lname)");
$insert_array = array(
":fname" => $fname,
":lname" => $lname
);
$query->execute($insert_array);
$db = NULL;
Я могу вставить ":;,-!"#¤%&&(%)?{][]}£$€{{{[email protected]@_--"
без каких-либо проблем, даже вставить SQL-инъекции. Но когда я пытаюсь обновить базу данных с помощью аналогичного кода, он принимает все типы специальных символов, кроме кавычек. Почему это? Код, который я использую для обновления:
try {
$db = new PDO('mysql:dbhost=' . $dbhost . ';dbname=' . $dbname, $dbuser, $dbpass);
$db -> exec("SET CHARACTER SET utf8");
} catch(PDOException $e) {
echo $e->getMessage();
}
$query = $db->prepare("UPDATE users SET fname=:fname, lname=:lname WHERE userid=:userid");
$update_array = array(
":fname" => $fname,
":lname" => $lname,
":userid" => $_GET['userid']
);
$query->execute($update_array);
$db = NULL;
Я благодарен за любую помощь, которую я могу получить.
- = SOLUTION = -
мне пришлось использовать htmlspecialchars()
для "декодировать" строку. Например:
<form action="" method="post">
First name<br><input type="text" name="fname" value="'.htmlspecialchars($user['fname']).'">
Last name: <br><input type="text" name="lname" value="'.htmlspecialchars($user['lname']).'">
<input type="submit">
</form>
Теперь все виды специальных символов прекрасно работают. Спасибо всем за помощь, очень признательны! : D
Этого не должно быть, параметризованные запросы должны допускать любые символы. Вы получаете сообщение об ошибке? – Barmar
Нет, это просто сокращает все после первого котировочного знака. : S – Treps
Интересно. Можете ли вы изменить в своем вопросе пример значений для второго скрипта, демонстрирующего это поведение? Надеюсь, мы сможем принять его, нет никаких триггеров, прикрепленных к этой таблице? – halfer