动态选择值

时间:2012-08-08 21:38:55

标签: php mysql

示例:

$user_input = $_POST['input'];
'SELECT '.$user_input.' FROM table_name'

因此,它基于安全(此示例显然不安全)值选择数据库中的列。这是实用/允许的代码吗?

2 个答案:

答案 0 :(得分:1)

在SQL中,您只需将string发送到DBMS(如MySQL)。因此,您可以构建所需的任何string并将其提交给DBMS。

您只需确保生成的SQL查询有效。这意味着,例如列存在,并且不会出现无效符号。

答案 1 :(得分:1)

就此而言,此代码有效,假设$user_input必须是有效的列名,这意味着它必须存在且不得包含任何特殊字符,保留字等(除非它们是转义)。

然而,正如您所说,此代码并不安全,但只要您计划安全地构建查询并使用PDO或MySQLi(没有弃用mysql_*函数...),您应该没问题。如果您需要一个不使用已弃用函数的示例(包括mysql_real_escape_string,也被弃用),我将提供一个。

我知道你说你知道这段代码不安全,但如果你好奇,这是另一个例子。正如评论和this question中所讨论的,这个输入:

$user_input = '; DELETE FROM table_name ; *';
'SELECT '.$user_input.' FROM table_name'

将删除表table_name的全部内容。即使此代码引发语法错误,MySQL仍将继续执行它,从而有效地截断table_name