在SQL pdo查询中使用变量作为表名

时间:2018-04-09 07:26:32

标签: php mysql pdo

我找到了一种在pdo查询中使用变量作为表名的方法。

但是,我想知道下面的代码是否安全。

function buildQuery($CheckInput)
{
    switch($CheckInput) {
        case $CheckInput == 'user':
            $TableName = 'user';
            break;

        case $CheckInput == 'guest':
            $TableName = 'guest';
            break;
    }

    $sql = "SELECT * FROM $TableName";
    return $sql;
}

该功能使用如下:

if (isset($_POST['DropDownChoice']) AND ($_POST['DropDownChoice'] == 'user' OR $_POST['DropDownChoice'] == 'guest'))  {
    $sql = buildQuery(htmlspecialchars($_POST['DropDownChoice']));
}

如果切换中$CheckInput永远不为真,那么$TableName将是未定义的 SQL查询会发生什么?

我发现的所有例子都没有使用默认情况,是否有原因?

1 个答案:

答案 0 :(得分:0)

设置默认值以确保获取表名

function buildQuery($CheckInput)
{

    switch($CheckInput)                 
    { 
        case 'user':
            $TableName = 'user';
            break;

        case 'guest':
            $TableName = 'guest';
            break;

        default:
           $TableName = 'guest';

    }

    $sql = "SELECT * FROM $TableName";
    return $sql;

}