MySQL_real_escape_string не добавляет косые черты? - PullRequest
1 голос
/ 08 июля 2011

Итак, я делаю это:

   <?php
    session_start();
    include("../loginconnect.php");
mysql_real_escape_string($_POST[int]);
    $int = nl2br($_POST[int]);
    $query = "UPDATE `DB`.`TABLE` SET `interests`='$int' WHERE `user`='$_SESSION[user]'";
    mysql_query($query) or die(mysql_error());
    mysql_close($con);
    ?>

И скажем, что $ _POST [int] - это "Foo 'bar". Одиночная кавычка остается без экранирования, и я получаю ошибку MySQL при запуске скрипта из-за кавычки. Что не так?

Ответы [ 3 ]

2 голосов
/ 08 июля 2011

Вы не используете результаты mysql_real_escape_string в своем запросе.Попробуйте сделать это:

$int = nl2br(mysql_real_escape_string($_POST[int]););
2 голосов
/ 08 июля 2011

m_r_e_s () ВОЗВРАЩАЕТ экранированное значение, оно не изменяет оригинал.

$int = mysql_real_escape_string($_POST['int']);

$query = "UPDATE ... interests = '$int' ...";

Обратите внимание, что я добавил кавычки вокруг int в значении POST.Без кавычек PHP видит его как постоянное значение (например, define ()).Если он не находит константу с таким именем, он вежливо предполагает, что вы имели в виду, что вы использовали строку, и корректируете ее соответствующим образом, но выдает предупреждение.Если бы вы сделали

define('int', 'some totally wonky value');

ранее, то вы получили бы неправильное значение POST, потому что PHP будет видеть его как $_POST[some totally wonky value].

0 голосов
/ 08 июля 2011
  • Вы должны использовать подготовленные заявления. Он имеет небольшую кривую обучения по функциям mysql_ *, но в долгосрочной перспективе он того стоит.
  • Вы должны заключать в кавычки ваши строки, например, $ _POST ['int'] вместо $ _POST [int].
  • Вверху вашего файла поместите error_reporting (-1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...