php - 使用仅检查获取和发布变量的数据库类?

标签 php sql mysql

我正在编写一个 web 应用程序,我正在考虑 sql 注入(inject)。 我已经创建了一个数据库类,它通过数组可以生成所有内容,而忘记了转义字符串。 该类(class)的工作方式如下:

$db->q(array(
'SELECT' => 'username',
'FROM' => USERS_TABLE, 
'WHERE' => array('user_id' => 1)
));

在该函数 (db::q()) 中,我检查了在创建 sql 字符串并执行它之前必须检查的所有内容。 顺便说一下,我认为它并不是真正需要的。所以我在考虑只使用一个函数 request_var($name, 'POST'/'GET') 可以发送每个 $_POST 和 $_GET 变量并转义它们,这样我就可以使用:

$db->query("SELECT username FROM ".USERS_TABLE." WHERE user_id = 1");

.够了吗?我应该使用 db::q() 吗?我应该使用 request_var() 吗?我应该同时使用两者吗?

最佳答案

您需要确保使用适合您数据库的函数对字符串进行转义。例如,通过使用 pg_escape_string在将字符串值插入数据库之前对其进行转义。

从您的代码片段来看,您似乎正在接受表名作为 GET/POST 的一部分?为什么你的前端需要知道你的数据库表?通常只有服务器端代码才需要此类知识。

关于php - 使用仅检查获取和发布变量的数据库类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4107464/

相关文章:

php - 如何在此查询中使用 LEFT JOIN

c# - SQL 在单个查询中更新多行

java - 以下sql代码无法插入数据是什么原因?

mysql - 行之间的sql分割数

mysql根据前一个日期计算

php - 在 MySQL 中按日期排序,其中日期为 %D

php - 如何编写函数来合并两条记录

php - 无法获取用于使用 PHP cURL 登录的 .ASPXAUTH cookie 值

mysql - 如何在 SQL 中查找表中的总销售额?

mysql - 内部连接不正确的总和()