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

jexiocij  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(301)

我找到了一种在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查询将发生什么变化?
我发现所有的例子都不使用默认情况,有什么原因吗?

lsmepo6l

lsmepo6l1#

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

function buildQuery($CheckInput)
{

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

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

        default:
           $TableName = 'guest';

    }

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

}

相关问题