你如何使用PHP在SQL查询中转义引号?

Lin*_*P D 7 php sql-server

我有一个问题

$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'
Run Code Online (Sandbox Code Playgroud)

如果我们在mysql服务器中执行它,它可以工作,但不能在sql server中

这是什么解决方案?.我使用的是sql server

Asa*_*aph 20

addslashes()将使用前导反斜杠转义单引号,这是MySQL中的有效语法,但不是MS SQL Server中的有效语法.在MS SQL Server中转义单引号的正确方法是使用另一个单引号.使用mysql_real_escape_string()MySQL的(mysql_escape_string()已弃用).不幸的是,没有类似的mssql_函数存在,所以你必须使用推出自己的str_replace(),preg_replace()或类似的东西.更好的是,使用数据库中立抽象层,例如支持参数化查询的PDO.

  • 好多了.+1 :) (3认同)
  • 我会为您+1,只不过您链接到同一个我曾两次投票否决的同等“报价”功能。 (2认同)

cHa*_*Hao 6

对于MySQL,您想要使用mysql_real_escape_string. addslashes做几乎相同的事情,并且字母较少,但显然它有些错误 - 不要使用它.

对于SQL Server,它有点复杂,因为(1)MySQL引用非标准的东西,(2)我没有看到引用SQL Server的东西的函数.但是,以下内容对您有用...

$escaped_str = str_replace("'", "''", $unsafe_str);
Run Code Online (Sandbox Code Playgroud)