Вы должны экранировать каждую из этих строк (в обоих фрагментах) с помощью mysql_real_escape_string ()
.
http://us3.php.net/mysql-real-escape-string
Причина, по которой два ваших запроса ведут себя по-разному, вероятно, связана с тем, что у вас включен magic_quotes_gpc
(о чем вы должны знать плохая идея). Это означает, что строки, собранные из $ _GET, $ _POST и $ _COOKIES, экранируются для вас (например, "O'Brien" -> "O \ 'Brien"
).
После сохранения данных и последующего их повторного получения строка, полученная вами из базы данных, будет автоматически экранирована для вас , а не . Вы вернетесь "О'Брайен"
. Итак, вам нужно будет передать его через mysql_real_escape_string ()
.
Вы должны сделать что-то подобное, чтобы облегчить отладку.
$sql = "insert into blah values ('$myVar')";
echo $sql;
Вы, вероятно, обнаружите, что одинарная кавычка экранирована обратной косой чертой в рабочем запросе. Это могло быть сделано автоматически с помощью PHP с помощью параметра magic_quotes_gpc, или, может быть, вы сделали это сами в какой-то другой части кода (функции, которые нужно искать, могут быть добавлены и полосами).
См. Magic Quotes
У вас есть пара вещей, которые борются за ваши струны.
mysql_real_escape_string ()
) Также возможно, что значение в одинарных кавычках отсутствует в параметрах первого запроса. В конце концов, ваш пример - это имя собственное, и, похоже, только второй запрос имеет дело с именами.