企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
BE 数据库类提供了 quoteKey, quoteValue, escape 三个方法处理拼接到 sql 中的数据,在需要拼接 SQL 的操作中,我们都应该使用这些处理方法处理数据,以防止SQL注入。 ### 键名处理 *** ~~~ $sql = 'SELECT * FROM ' . $db->quoteKey('user'); // 相当于执行 SQL // SELECT * FROM `user` $sql = 'SELECT * FROM ' . $db->quoteKey('user') . ' WHERE ' . $db->quoteKey('age') . ' < 20' ; // 相当于执行 SQL // SELECT * FROM `user` WHERE `age` < 20 ~~~ ### 写入的值处理 *** ~~~ $name = "abc'abc"; $sql = 'SELECT * FROM ' . $db->quoteKey('user') . ' WHERE ' . $db->quoteKey('name') . ' = ' .$db->quoteValue( $name ) ; // 对等SQL(MySQL): SELECT * FROM `user` WHERE `name` = 'abc\'abc' // 对等SQL(Oracle): SELECT * FROM "user" WHERE "name" = 'abc\'\'abc' ~~~ ### 写入的值处理 (不带外层引号) *** ~~~ $name = "abc'abc"; $sql = 'SELECT * FROM ' . $db->quoteKey('user') . ' WHERE ' . $db->quoteKey('name') . ' = \'' .$db->escape($name) . ' \'' ; // 对等SQL(MySQL): SELECT * FROM `user` WHERE `name` = 'abc\'abc' // 对等SQL(Oracle): SELECT * FROM "user" WHERE "name" = 'abc\'\'abc' ~~~