参数可以替换 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中文网其他相关文章!