Powinieneś uciec przed każdym z tych ciągów (w obu fragmentach) za pomocą mysql_real_escape_string() .
https://us3.php.net/mysql-real-escape-string
Powodem, dla którego Twoje dwa zapytania zachowują się inaczej, jest prawdopodobnie to, że masz magic_quotes_gpc włączony (co powinieneś wiedzieć, to zły pomysł). Oznacza to, że ciągi zebrane z $_GET, $_POST i $_COOKIES są dla ciebie eskejpowane (np. "O'Brien" -> "O\'Brien" ).
Po przechowaniu danych, a następnie ponownym ich odzyskaniu, ciąg, który otrzymasz z bazy danych, nie być automatycznie uciekł dla Ciebie. Odzyskasz "O'Brien" . Musisz więc przekazać go przez mysql_real_escape_string() .