SQL Server 2008 и PHP - sqlsvr_escape_string? - PullRequest
       12

SQL Server 2008 и PHP - sqlsvr_escape_string?

2 голосов
/ 06 августа 2009

Я использую php и sql server 2008, а драйвер SQL Server для PHP 1.0 не имеет аналогичной управляющей строки, как mysql_real_escape_string.

Нужно ли мне просто заменить одинарные кавычки чем-то вроде

function sqlsvr_escape_string($string)
{
  $pattern = "'";
  $replace = "''";
  return(stripslashes(eregi_replace($pattern,$replace,$string)));
}

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

$tsql = "SELECT * from tblUsers where email=(?) AND password=(?)";
$params = array($email, $encryptedPass);
$stmt = sqlsvr_prepare($conn, $tsql, $params);

Единственный ресурс, который я смог найти, был этот , откуда взят приведенный выше фрагмент.

Спасибо за любую помощь и комментарии.

-tk

Ответы [ 2 ]

2 голосов
/ 07 августа 2009

позже. Вам не нужно беспокоиться о выходе из SQL, если вы используете параметризованные операторы.

С точки зрения «клиентского кодера» (как, например, вы являетесь клиентом SQL Server), причина, по которой вы используете параметризованные операторы, заключается в том, что вы не доверяете себе должным образом и / или последовательно избегаете своих значений. Вместо этого вы передаете эту ответственность кодерам, которые создали и поддерживают sqlsvr_prepare (или AdoDB, или Propel, или Doctrine, и т. Д.). Это их задача убедиться, что все данные правильно экранированы.

2 голосов
/ 06 августа 2009

Поскольку он использует подготовленные операторы (возможно, называемые «параметризованные операторы»), вам не нужно экранировать данные самостоятельно: драйвер, я думаю, будет знать, как их экранировать, в зависимости от того, что находится в БД.

Я почти уверен, что вам не нужно писать собственную экранирующую функцию.

Лучше всего убедиться, однако, в том, чтобы проверить: например, можете ли вы вставить произвольную строку, содержащую одну кавычку? Сохранена ли цитата в БД, или вы получили ошибку?

...