DUPO ACTUALIZACIÓN no parece almacenar cotizaciones?

Estoy empezando con los métodos de DOP y ahora estoy atascado con una pequeña pregunta. Si creo un formulario para insertar el nombre y el apellido en una base de datos, puedo insertar todo tipo de caracteres especiales con el siguiente código:

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;

Puedo insertar":;,-!"#¤%&&(%)?{][]}£$€{{{$@@_--" Sin ningún problema, incluso inserte una inyección SQL. Pero cuando intento actualizar la base de datos con un código similar, acepta todos los tipos de caracteres especiales, excepto las comillas. ¿Porqué es eso? El código que estoy usando para actualizar es:

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;

Estoy agradecido por toda la ayuda que puedo obtener.

- = SOLUCIÓN = -

Tuve que usarhtmlspecialchars() para "decodificar" la cadena. Me gusta esto:

<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>

Ahora todo tipo de personajes especiales funciona perfectamente. Gracias por ayudar a todos, realmente lo aprecio! :RE

Respuestas a la pregunta(1)

Su respuesta a la pregunta