Трябва да избягвате всеки от тези низове (в двата фрагмента) с mysql_real_escape_string() .
https://us3.php.net/mysql-real-escape-string
Причината, поради която двете ви заявки се държат различно е вероятно, защото имате magic_quotes_gpc включен (което трябва да знаете, че е лоша идея). Това означава, че низовете, събрани от $_GET, $_POST и $_COOKIES, се екранират вместо вас (т.е. "O'Brien" -> "O\'Brien" ).
След като съхраните данните и впоследствие ги извлечете отново, низът, който ще получите обратно от базата данни, няма ще бъде автоматично избяган вместо вас. Ще получите обратно "O'Brien" . Така че ще трябва да го предадете през mysql_real_escape_string() .