Vous devriez échapper chacune de ces chaînes (dans les deux extraits) avec mysql_real_escape_string() .
https://us3.php.net/mysql-real-escape-string
La raison pour laquelle vos deux requêtes se comportent différemment est probablement due au fait que vous avez magic_quotes_gpc activé (ce qui, vous devez le savoir, est une mauvaise idée). Cela signifie que les chaînes recueillies à partir de $_GET, $_POST et $_COOKIES sont échappées pour vous (par exemple, "O'Brien" -> "O\'Brien" ).
Une fois que vous avez stocké les données, puis que vous les avez récupérées à nouveau, la chaîne que vous récupérez de la base de données ne sera pas être automatiquement échappé pour vous. Vous récupérerez "O'Brien" . Donc, vous devrez le passer par mysql_real_escape_string() .