PHP、ODBC和SQL注入

PHP、ODBC和SQL注入,php,sql,sql-server,odbc,Php,Sql,Sql Server,Odbc,当使用ODBC连接到MS SQL Server时,如何防止SQL注入odbc\u prepare()由于unixODBC的错误而无法工作(),并且odbc也没有\u escape或\u quote函数 此外,PDO还有一个6年前的错误,如果结果在任何列中返回空值,则整个结果集返回空值(至少在通过ODBC连接到MSSQL时) 那么,我可以做些什么来防止SQL注入呢?尽管这是一个老问题,而且odbc\u prepare()几乎被弃用 您应该做的是改用PDO: $pdo->setAttribut

当使用ODBC连接到MS SQL Server时,如何防止SQL注入<代码>odbc\u prepare()由于unixODBC的错误而无法工作(),并且odbc也没有
\u escape
\u quote
函数

此外,PDO还有一个6年前的错误,如果结果在任何列中返回空值,则整个结果集返回空值(至少在通过ODBC连接到MSSQL时)


那么,我可以做些什么来防止SQL注入呢?

尽管这是一个老问题,而且
odbc\u prepare()
几乎被弃用

您应该做的是改用PDO:

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

// Use the MSSQL driver's native prepared statements.
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, FALSE);

这应该是可行的。

尽管这是一个老问题,
odbc\u prepare()
几乎被弃用

您应该做的是改用PDO:

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

// Use the MSSQL driver's native prepared statements.
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, FALSE);

这应该行得通。

odbc_prepare()有什么问题?@sheldonCooper链接问题中有详细说明;它出错了。是的,我看到了。我已经提出了一个解决方案。我不想显得毫无帮助(或不切实际),但如果您当前的软件堆栈存在已知的bug,并且这些bug对您的场景至关重要,那么您至少应该评估其他选项。在Windows上使用PHP将使您能够访问一个支持PDO的项目,尽管我知道在您的情况下,这样的更改可能是不可能的。这是一个针对无法更改的大型客户机的短期项目。我只是一个承包商,他们不会听我的。odbc_prepare()有什么问题?@sheldonCooper链接问题中有详细说明;它出错了。是的,我看到了。我已经提出了一个解决方案。我不想显得毫无帮助(或不切实际),但如果您当前的软件堆栈存在已知的bug,并且这些bug对您的场景至关重要,那么您至少应该评估其他选项。在Windows上使用PHP将使您能够访问一个支持PDO的项目,尽管我知道在您的情况下,这样的更改可能是不可能的。这是一个针对无法更改的大型客户机的短期项目。我只是一个承包商,他们不会听我的。+1用于将
ATTR\u EMULATE\u设置为
false
。在使用prepared语句时防止SQL注入的最简单方法。+1用于将
ATTR\u EMULATE\u prepared
设置为
false
。使用预处理语句时防止SQL注入的最简单方法。