gpt4 book ai didi

PHP PDO - 绑定(bind)表名称?

转载 作者:行者123 更新时间:2023-11-29 21:39:36 26 4
gpt4 key购买 nike

是否可以绑定(bind)表名?

我想创建一个类来读取表中的列,并根据字段类型为我生成表单输入。当我这样做时$form = new form("users"); ,构造函数应该首先使用以下代码从表中获取字段名称:

class form{

public function __construct($table, $skip = array("id")){
$pdo = new PDO('mysql:host=localhost;dbname=site;',USER,PASS);

$query = $pdo->prepare("DESCRIBE :table");

$query->bindValue(':table', $table, PDO::PARAM_STR, strlen($table));

$query->execute();

while($field = $query->fetch(PDO::FETCH_NUM)){
var_dump($field);
echo "<br /><br />";
}

unset($pdo);
}
}

当我在准备语句中指定“users”而不是“:table”时,它工作得很好,但是绑定(bind)它正在工作,而且我很确定这是因为它正在尝试绑定(bind)表名。另外,这需要绑定(bind),因为我希望能够通过 $_GET 传递我的表名。等等。

最佳答案

Is it possible to bind a table name?

没有。

您必须将表名称列入白名单。我怀疑您想让用户浏览数据库中的任何表。

假设您正在使用一个类,那么添加表名作为属性将是理所当然的。它将是简单、优雅和安全的。先创建一个抽象父类

abstract class abstractTable {
private $table;
private $db;

public function __construct($pdo){
$this->db = $pdo;
}
public function describe() {
return $db->query("DESCRIBE `$this->table`")->fetchAll();
}
}

然后为您的表创建一个特定的类

class someTable extends abstractTable {
private $table = 'sometable';
}

这样您就可以获得所需的列列表

$pdo = new PDO(...);
$table = new someTable($pdo);
$fields = $table->describe();

简单、简洁、强大、安全。

关于PHP PDO - 绑定(bind)表名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34644388/

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