使用表来参数化PDO中的列/表名称

时间:2017-03-29 13:49:32

标签: php mysql pdo

无法use parameters to describe column or table names in PDO

例如:

CREATE TABLE ? (id INT(6) PRIMARY KEY AUTO_INCREMENT, ...)

如何使用临时表来处理恶意数据,然后将其反馈到语句中?

$hex = bin2hex(random_bytes(8));
$stmt = $db->prepare('INSERT INTO tmpdata (value,hex) VALUES (:val,:hex)');
$stmt->execute(array(
  ":val" => $_POST['catname'],
  ":hex" => $hex
));
$stmt = $db->prepare('SELECT value FROM tmpdata WHERE hex=?');
$stmt->execute(array($hex));
$row = $stmt->fetchAll(PDO::FETCH_ASSOC);
$cleaned_value = $row[0]['value'];

对于列名和表名,这是将参数输入PDO的可接受且更重要的安全方法吗?

1 个答案:

答案 0 :(得分:0)

没有丝毫。

如果你带一个带毒药的烧瓶并喝它,你就会死 是什么让你觉得在饮用前将它存放在橱柜里会使它无害?

更直接地针对您的问题,您应该永远不会根据用户输入创建表格。不是因为任何危险而是因为理智。您的数据库设计应该是实体和静态的,只为所有人制作一次,并且仅在有时候仅由管理员进行更改。

因此,您现在最关心的是学习数据库设计基础知识。