2012-02-26 65 views
0

在Codeigniter/PHP中,我无法在下面的SQL语句中转义$ table的实例。逃离mysql没有单引号?

当我尝试任何方法,如在查询结束时使用的方法,他们不工作,因为单引号。

在这种情况下,是否有任何方法或更改可以推荐?

在此先感谢您的帮助。

MYSQL声明:

$sql = "SELECT * FROM $table INNER JOIN resumes ON resumes.resume_id = $table.resume_id AND resumes.user_id = ".$this->db->escape($user_id)." AND $table.$field = ?"; 
+0

从哪里得到'$ table'变量? – zerkms 2012-02-26 23:13:19

+0

什么是建立的字符串? – user544262772 2012-02-26 23:14:57

+0

@zerkms,$ table变量来自控制器,而不是用户输入,不知道这是否使问题有点不相关? – jsuissa 2012-02-26 23:17:52

回答

2

你应该从未接受表名或列名作为用户输入。

,但如果你没有其他的选择 - 唯一的办法就是白名单

因此,您创建的所有允许的表名数组用于像

$valid_tables = array('t1', 'table2'); 

,然后检查该阵列中存在$table

if (in_array($table, $valid_tables)) { 
    // everything is fine 
} else { 
    // something is wrong 
} 
+0

谢谢 - 在这种情况下,它来自可信赖的来源,但作为一般性你回答是非常有帮助的。再次感谢。 – jsuissa 2012-02-26 23:28:33