gpt4 book ai didi

php - 使用 PHP 的 PDO 安全地删除 SQL 查询中的变量表名

转载 作者:可可西里 更新时间:2023-11-01 08:20:38 26 4
gpt4 key购买 nike

我正在尝试创建一个允许我删除表中特定行的函数。我想将该函数用于几个不同的表,因此当我调用该函数时,我会将函数的参数之一作为表名。这是我正在尝试做的一个例子:

function delete($conn, $table, $id) {
$stmt = $conn->prepare("DELETE FROM ".$table." WHERE id = :id");
$stmt->bindParam(":id", $id, PDO::PARAM_INT);
$stmt->execute();

if ($stmt->rowCount() > 0) {
return true;
} else {
return false;
}
}

我遇到的一个问题是,因为 $table 变量直接进入 SQL 查询,我的数据库不会面临 SQL 注入(inject)的风险吗?

正如我从其他一个问题中了解到的那样,我不能只是将 :table 放入 bindParam 函数中,所以我不知道如何使该函数安全。有什么想法吗??

最佳答案

清理表数据

您可以定义一组列入白名单的表名以在您的函数中使用:

$whitelist = array('table1', 'table2', ...)

然后使用:

$myTable= array_intersect_keys($table, array_flip($whitelist));

$myTable 现在是安全的。

关于php - 使用 PHP 的 PDO 安全地删除 SQL 查询中的变量表名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13499390/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com