【发布时间】:2009-01-17 20:31:59
【问题描述】:
所以我正在尝试构建一个脚本,该脚本会自动在有效列名前面加上适当的表前缀(例如“t.”或“r.”)
$t_columns = array('id', 'name', 'label');
$r_columns = array('related_value');
输入:
id > 1 AND (name = 'Hello' OR label IN ('World', 'Planet name AND label')) AND (related_value > 1 AND related_value < 50)
输出:
t.id > 1 AND (t.name = 'Hello' OR t.label IN ('World', 'Planet name AND label')) AND (r.related_value > 1 AND r.related_value < 50)
请注意您无法执行正常的 str_replace。什么是最简单的代码(我猜是 preg_replace)来确保所有表名都被正确地添加?
【问题讨论】:
-
请问上面INPUT之类的SQL是从哪里来的?创建SQL的时候可以不加表前缀吗,还是不能这样?
-
这是一个函数,例如buildRecords($where = 1, $orderby = 'id DESC')。用户无需知道表前缀即可添加 $where 字符串。所以不,它完全是动态的。
-
用户可以输入包含他们喜欢的任何文本的 WHERE 子句吗?如果我误解了您,我深表歉意,但这对我来说似乎存在 SQL 注入风险。
-
是的。问题是只有登录的管理员才能构建 $where 查询。