Экранирующие струны - PullRequest
       2

Экранирующие струны

0 голосов
/ 16 февраля 2011

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


$sql = 'SELECT test FROM test WHERE id = :id';
$sth = $dbh->prepare($sql);
$sth->execute(array(':id' => 1));
$red = $sth->fetchAll();

Ответы [ 3 ]

0 голосов
/ 16 февраля 2011

Я подозреваю, что вы неправильно используете предварительно подготовленные операторы или что-то не так с вашим кодом.

В документах указано:

Параметры к подготовленным высказываниям не нужно цитировать; водитель автоматически обрабатывает это. Если Приложение использует исключительно подготовленные заявления, разработчик может быть уверен что SQL-инъекция не произойдет (однако, если другие части запрос строится с неэкранированный ввод, SQL-инъекция еще возможно).

0 голосов
/ 16 февраля 2011

Я подозреваю, что, хотя вы можете использовать подготовленное утверждение, вы не привязываете параметры.Например, вместо

$val = "Some string with an a'postrophe in it";
$stmt = $pdo->prepare("UPDATE table SET col = '$val'");
$stmt->execute();

Вы должны использовать

$val = "Some string with an a'postrophe in it";
$stmt = $pdo->prepare('UPDATE table SET col = :val');
$stmt->bindParam('val', $val);
$stmt->execute();

или как минимум

$val = "Some string with an a'postrophe in it";
$stmt = $pdo->prepare('UPDATE table SET col = :val');
$stmt->execute(array('val' => $val));

Это использует именованные параметры, но вы также можете использовать позиционныеиспользуя ? в качестве заполнителя

0 голосов
/ 16 февраля 2011

Я не уверен, что понимаю ваш вопрос, но это может помочь с выходом PDO:

PDO::quote($data)
...