我有一个问题
$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.
对于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)