当前位置: 首页 > 面试题库 >

PHP PDO语句可以接受表名或列名作为参数吗?

严令秋
2023-03-14
问题内容

为什么不能将表名传递给准备好的PDO语句?

$stmt = $dbh->prepare('SELECT * FROM :table WHERE 1');
if ($stmt->execute(array(':table' => 'users'))) {
    var_dump($stmt->fetchAll());
}

还有另一种安全的方法可以将表名插入SQL查询吗?有了安全,我的意思是我不想做

$sql = "SELECT * FROM $table WHERE 1"

问题答案:

表名和列名不能用PDO中的参数替换。

在这种情况下,您只需要手动过滤和清理数据。一种实现方法是将简写参数传递给将动态执行查询的函数,然后使用一条switch()语句创建要用于表名或列名的有效值白名单。这样,就不会有用户输入直接进入查询。因此,例如:

function buildQuery( $get_var ) 
{
    switch($get_var)
    {
        case 1:
            $tbl = 'users';
            break;
    }

    $sql = "SELECT * FROM $tbl";
}

通过不保留默认大小写或使用返回错误消息的默认大小写,可以确保仅使用要使用的值。



 类似资料:
  • 问题内容: 我想创建一个 存储过程 ,我想在表中插入值。但是我不知道我必须在哪个字段中插入值,而在 运行时,我将决定应在哪个字段中插入值 。我想做的是 如上例所示,是否可以在存储过程中传递这种类型的参数? 我也想使用条件 声明@Query nvarchar(4000)声明@ Query1 nvarchar(4000)声明@ParmDefinition nvarchar(500); Descript

  • 问题内容: 我在SQL表中有一些列,例如text_en,text_es,text_de。现在,我只想根据语言从一列中检索值。因此,我创建了一个sql字符串, 并在vb代码中使用了 sql,但是sql返回了该列的名称,而不是该列的值。我如何获得价值? 问题答案: 你也可以

  • 问题内容: 我已经多次使用mysqli_stmt_bind_param函数。但是,如果我分开试图防止SQL注入的变量,则会遇到错误。 这是一些代码示例: 是否有可能以某种方式用另一个问号语句替换串联,制作另一个绑定参数语句或添加到现有的语句中以防止SQL注入? 像这样或某种形式: 问题答案: 对您的问题的简短回答是“否”。 从最严格的意义上讲,在数据库级别,准备好的语句仅允许将参数绑定到SQL语句

  • 问题内容: 这可能吗?例如 如果没有,我应该这样做吗: 还是我需要学习其他技巧? 问题答案: 表名和列名不能用PDO中的参数替换。请参见PHP PDO语句可以接受表名或列名作为参数吗?

  • 我下载了Visual Studio2015和SQL Data Tools 2015,因为我正在尝试制作一个简单的SSIS包,用于将一些数据行从服务器上的db中的表复制到另一个服务器上的另一个db中的表。我有一些复杂的问题使我的工作更加困难,例如需要动态地构建表名。到目前为止,我已经创建了一个执行Sql任务,用于删除目标表中的数据,以避免重复行。在输出中,我附加了一个数据流活动,包括一个Ole db

  • 问题内容: 我正在尝试进行设置,以便将表名作为参数传递给命令文本,但是我无法使其正常工作。我四处张望,发现了这样的问题:使用C#进行MySQL的参数化查询,但是我没有任何运气。 这是相关的代码(connection == 包含连接字符串): 如果我更改: 至: 作为一种测试方法,它是可行的(我正在将XML从数据集中写入控制台以进行检查)。因此,我很确定问题只是以错误的方式使用了参数功能。有指针吗?