mysql_real_escape_string () ничего не ускользает

0
  • Мне нужно использовать реальный escape в обоих моих инструкциях INSERT и SELECT FROM?
  • почему синтаксис, который я использую в следующем примере, не работает (это только один из многих способов, которые я пробовал)?

    //insert user input for word 1
    $sql = "INSERT INTO test (Word1, Word2, Word3, Word4, Word5)
    VALUES('$Word1','$Word2','$Word3','$Word4','$Word5')",
    mysql_real_escape_string($Word1),
    mysql_real_escape_string($Word2),
    mysql_real_escape_string($Word3),
    mysql_real_escape_string($Word4),
    mysql_real_escape_string($Word5);
    if(!mysql_query($sql,$con))
    {
      die('Error: ' . mysql_error());
    }
    
Теги:
mysql-real-escape-string

2 ответа

1
Лучший ответ

Я очень рекомендую, чтобы вы вообще избегали экранирования, и переходите непосредственно к подготовленным операторам с mysqli:: prepare, возможно через PDO. Это в конечном счете проще и безопаснее:

$dsn = 'mysql:dbname=test;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';

$dbh = new PDO($dsn, $user, $password);

$sql =
    'INSERT INTO mytable ' .
    '(Word1, Word2, Word3, Word4, Word5)' .
    'VALUES(?, ?, ?, ?, ?)';

$stmt = $dbh->prepare($sql);

$words = array('word1', 'word2', 'word3', 'word4', 'word5');
$stmt->execute($words);

$words = array('word6', 'word7', 'word8', 'word9', 'word10');
$stmt->execute($words);
4

Похоже, вы пытаетесь использовать sprintf(), чтобы сделать это правильно, вам нужно немного переформатировать код:

$sql = sprintf("INSERT INTO test (Word1, Word2, Word3, Word4, Word5)
VALUES('%s','%s','%s','%s','%s')",
mysql_real_escape_string($Word1),
mysql_real_escape_string($Word2),
mysql_real_escape_string($Word3),
mysql_real_escape_string($Word4),
mysql_real_escape_string($Word5)
);
  • 0
    каково значение% s?
  • 0
    это спецификатор типа данных для строк форматирования php, если вы зайдете на php.net/sprintf, он детализирует различные доступные спецификаторы типа

Ещё вопросы

Сообщество Overcoder
Наверх
Меню