如何在php中为每个数据库扩展转义字符串?

在任何人得出关于这个问题的性质的结论之前,我已经知道了parameterized/prepared statements并且尽可能地使用它们.不幸的是,在构建动态查询时并不总是可以使用它们.

我有兴趣使用除MySQL以外的数据库,但我不能轻易找到关于如何为每个数据库扩展转义字符串以防止SQL Injection的良好来源.

PHP文档列出了以下特定于供应商的数据库扩展.我把那些我最感兴趣的人加了下来:

> CUBRID
> dBase
> DB
> FrontBase
> filePro
> Firebird / InterBase
> Informix
> IBM DB2
>安格尔
> MaxDB
>蒙戈
> mSQL
> Mssql
> MySQL
> Mysqli
> Mysqlnd
> mysqlnd_ qc
> OCI8
> Ovrimos SQL
>悖论
> PostgreSQL
> SQLite
> SQLite3
> Sybase
> tokyo_ tyrant

对大多数参数化语句不起作用的动态查询示例:

"Select $col1, $col2 from $table where $col1 = ?"

在$col1,$col2和$table被转义之后,该语句可以在预准备语句中使用.

解决方法:

PostgreSQL和其他人(PDO)

PostgreSQL可以使用pg_escape_string进行字符串转义.

对于PostgreSQL,由于pg_query_params(),您不需要任何转义

除此之外,你应该使用PDOprepared statements.他们会照顾它,你可以单独传递参数;就像pg_query_params()一样

上一篇:正确的方法来逃避包含PHP变量的HTML字符串中的引号


下一篇:在Javascript中包含换行符的Unescape HTML实体?