为了账号安全,请及时绑定邮箱和手机立即绑定

PHP PDO-绑定表名称?

PHP PDO-绑定表名称?

PHP
牛魔王的故事 2019-11-04 14:00:38
可以绑定表名称吗?我想创建一个类以从表中读取列,并根据字段类型为我生成表单输入。当我这样做时$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);    }}当我在prepare语句中指定“ users”而不是“:table”时,这很好用,但是绑定可以正常工作,我很确定这是因为它试图绑定表名。另外,这需要绑定,因为我希望能够通过诸如此类传递我的表名$_GET。
查看完整描述

3 回答

?
米脂

TA贡献1836条经验 获得超3个赞

可以绑定表名称吗?


没有。


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


而且,您还必须手动设置标识符的格式。有一个带示例的Wiki。为什么不先阅读它?


更新: 如您所见,PDO实用于现实生活中的任务。因此,您必须拥有一个更智能的抽象库来处理MySQL查询。这是一个使用safeMysql类的示例,它将大大缩短您的代码:


class form{

    public function __construct($table){

        global $db;

        return $db->getAll("DESCRIBE ?n", $table);

    }

}

2个注意事项:


我删除了第二个参数,因为您的函数中没有使用它的代码。

切勿在课堂上联系。请改用已经打开的连接。否则,您将通过大量连接杀死MySQL服务器。

排除实施版本


class form {

    public function __construct($table,$skip = array("id")){

        global $db;

        $data = array();

        $res = $db->query("DESCRIBE ?n", $table);

        while($row = $db->fetch($res)) {

            if (!in_array($row['Field'],$skip)) {

                $data[] = $row;

            }

        }

        return $data;

    }

}

但是,此类类很少能按预期使用-总是有很多例外情况和手动格式化才能使其可用。


查看完整回答
反对 回复 2019-11-04
?
波斯汪

TA贡献1811条经验 获得超4个赞

完成所有修改后,您的答案就会变得更加有意义。我将坚持一个简单的,无绑定的PDO查询,因为它需要与您提到的类相同数量的语句,并创建一个全局pdo变量。同样,该类并非旨在使表单从头到尾完成,而只是旨在为您创建具有正确输入类型的输入和标签,具有正确“ for”的标签,最大长度等于数据库中字段的最大长度,等等。就格式化而言,只要保持HTML简单,所有格式化都可以在CSS中轻松完成。

查看完整回答
反对 回复 2019-11-04
  • 3 回答
  • 0 关注
  • 315 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信