首页 > 后端开发 > php教程 > PHP PDO 准备语句可以使用表名或列名参数吗?

PHP PDO 准备语句可以使用表名或列名参数吗?

DDD
发布: 2025-01-03 07:33:40
原创
474 人浏览过

Can PHP PDO Prepared Statements Use Parameters for Table or Column Names?

参数可以替换 PHP PDO 语句中的表名或列名吗?

不可能将表名作为参数传递给准备好的 PDO 语句。请考虑尝试执行此操作的以下代码:

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

此方法将导致错误,因为表和列名称无法用参数替换。

安全插入表名插入 SQL 查询

为了安全地将表名插入 SQL 查询,需要一种替代方法。避免直接将用户输入输入到查询中,例如:

$sql = "SELECT * FROM $table WHERE 1"
登录后复制

相反,请考虑过滤和清理输入。一种方法是将速记参数传递给动态执行查询的函数。然后可以使用 switch() 语句将有效的表名称列入白名单。例如:

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

    $sql = "SELECT * FROM $tbl";
}
登录后复制

通过省略默认情况或使用显示错误消息的情况,您可以保证仅使用所需的值。

以上是PHP PDO 准备语句可以使用表名或列名参数吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板