class Search{
`public function query(){`
`SELECT * FROM $tableName`
`}`
}
$object = new Search();
$object->query('tableName');//this is good practice? and safty to avoid sql Inyection?
Etc...
答案 0 :(得分:0)
简短的回答是不,不要这样做。
据说它可能非常安全,具体取决于参数的来源。
考虑将变量映射到表名,因此您可以验证您是仅使用有效的表名构建查询而不是开放式文本。
一个简单的解决方案可能如下所示:
public function query($tableName){
$allowedTables = ['accounts', 'items', 'products'];
$table = in_array($tableName, $allowedTables) ? $tableName : null;
if(empty($table)){
return false;
}
$sql = "Select * FROM " . $table;
...
}
答案 1 :(得分:0)
您可以通过“白名单”允许的表格以安全的方式执行此操作。有许多不同的实现取决于您的需求。例如,使用以下命令获取表的完整或过滤列表:
SHOW TABLES;
BTW,PHP有a function for this。然后检查输入表是否在列表中。
我认为这样做是安全的。