Как Вы выходите из кавычек в запросе SQL с помощью php?

У меня есть запрос

$sql ="SELECT CustomerID FROM tblCustomer 
WHERE EmailAddress = '".addslashes($_POST['username']) ."' AND Password = '".addslashes($_POST['password']) ."'";

//  while printing,   it will be

SELECT CustomerID FROM tblCustomer WHERE EmailAddress = 'test@ab\'c.com' AND Password = '123'

если мы выполняющий это в mysql сервере это работает, но не в SQL-сервере

каково решение для этого?. Я использую SQL-сервер

7
задан Aaron Harun 15 July 2010 в 07:24
поделиться

4 ответа

addlashes () избегает одинарных кавычек с начальным обратным слэшем, что является допустимым синтаксисом в MySQL, но не в MS SQL Server. Правильный способ избежать одинарной кавычки в MS SQL Server - использовать другую одинарную кавычку. Используйте mysql_real_escape_string () для MySQL ( mysql_escape_string () устарел). К сожалению, аналогичной функции mssql_ не существует, поэтому вам придется откатить свою собственную, используя str_replace () , preg_replace () или что-то подобное. Еще лучше использовать нейтральный уровень абстракции базы данных, такой как PDO, который поддерживает параметризованные запросы.

20
ответ дан 6 December 2019 в 05:42
поделиться

Для MySQL вы хотите использовать mysql_real_escape_string . добавляет косые черты делает почти то же самое и имеет меньше букв, но, видимо, он ошибается - не используйте его.

Для SQL Server это немного сложнее, поскольку (1) MySQL цитирует данные нестандартно, и (2) я не вижу функции, созданной для цитирования материалов для SQL Server. Однако следующее должно сработать для вас ...

$escaped_str = str_replace("'", "''", $unsafe_str);
6
ответ дан 6 December 2019 в 05:42
поделиться

для mysql

USE mysql_real_escape_string

http://php.net/manual/en/function.mysql-real-escape-string.php

например:

// Query
$query = sprintf("SELECT * FROM tblCustomer WHERE user='%s' AND password='%s'",
            mysql_real_escape_string($user),
            mysql_real_escape_string($password));

для mssql

посмотрите ответы здесь:

Как избежать строк в SQL Server с помощью PHP?

4
ответ дан 6 December 2019 в 05:42
поделиться

Вы не должны создавать SQL-запрос динамически, так как это опасно (и не нужно). Правильнее всего использовать параметризованный запрос, см. http://msdn.microsoft.com/en-us/library/cc296201%28SQL.90%29.aspx

$sql ="SELECT CustomerID FROM tblCustomer WHERE EmailAddress = ? AND Password = ?";
$stmt = sqlsrv_query( $conn, $sql, array($_POST['username'], $_POST['password']));

Это гораздо безопаснее и позволяет не беспокоиться об экранировании символов. Еще один момент - остерегайтесь сравнений с учетом регистра и без учета регистра. Например, если вы хотите, чтобы адрес электронной почты не учитывал регистр, а пароль учитывал регистр, используйте что-то вроде:

$sql ="SELECT CustomerID FROM tblCustomer WHERE EmailAddress = ? COLLATE SQL_Latin1_General_CP1_CIAI AND Password = ? COLLATE SQL_Latin1_General_CP1_CSAS";
3
ответ дан 6 December 2019 в 05:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: