php pdo设置表前缀,PHP的PDO – 绑定表名称?

PHP的PDO – 绑定表名称?

是否可以绑定一个表名?

我想创build一个类来读取表中的列,并根据字段types为我生成表单input。 当我做$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 "
"; } unset($pdo); } }

这工作得很好,当我在prepare语句中指定“users”而不是“:table”时,但是它正在工作的绑定,我敢肯定这是因为它试图绑定一个表名。 此外,这需要绑定,因为我想有能力通过$_GET和我的表名称。

是否可以绑定一个表名?

没有。

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

而且你也必须手动格式化标识符。 有一个标签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; } }

然而,这样的类很less可以按照预期使用 – 总是有很多例外和手动格式化来使其可用。

他build议的用法是:

$db = new DatabaseConnection('someMysqlServer', 'user', 'pass', 'database'); $result = $db->exec($db->filterForSql('SELECT * FROM '.$tableName.';'));

如果其他人认为这是使用PDO的“安全”方式,我会感兴趣。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值