首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PHP PDO动态查询构建器类

PHP PDO动态查询构建器类
EN

Stack Overflow用户
提问于 2018-07-10 17:46:33
回答 1查看 1.2K关注 0票数 1

我正在编写一个类来生成动态SQL插入查询。我已经创建了一个有7列的测试表,如果我还考虑了id,这是一个自动增量值,否则这些值只有6列。我试图测试我编写的插入函数是否有效,但控制台记录了一个关于有界变量数量的错误:PHP Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens。通常我用来写我的查询,这是我第一次得到这个错误。有没有可能我还需要在查询中包括id列字段?代码如下:

测试页面

代码语言:javascript
复制
<?php
$dataManager = new DataManager($db);

$table = 'hats_info';
$data = array('test0','test1','test2','test3','test4','test5');
$columns = array('materialA','materialB','materialC','materialD','accessories','hat_image');
$holders = array('?','?','?','?','?','?');

echo $dataManager->insert($data, $table, $columns, $holders);

?> 

类方法代码

代码语言:javascript
复制
<?php 

public function insert($table, array $data, array $columns , array $holders){

    $columns = implode(', ', array_values($columns));
    $holders = implode(', ', array_values($holders));
    $values = implode(', ', array_values($data));

    $stmt = $this->db->prepare("INSERT INTO $table ($columns) VALUES ($holders)");
    return $stmt->execute(array($values));
}

?>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-11 04:42:58

我用下面的方法实现了这样的函数:

代码语言:javascript
复制
$table = 'hats_info';

$data = [
  'materialA' => 'test0',
  'materialB' => 'test1',
  'materialC' => 'test2',
  'materialD' => 'test3',
  'accessories' => 'test4',
  'hat_image' => 'test5'
];

echo $dataManager->insert($table, $data);

public function insert($table, array $data) {
    $columns_delimited = implode(', ' array_map(
        function ($column) { return "`$column`"; },
        array_keys($data)
    ));
    $placeholders = implode(', ', array_fill(1, count($data), '?'));
    $sql = "INSERT INTO `$table` ($columns_delimited) VALUES ($placeholders)"
    $stmt = $this->db->prepare($sql);
    return $stmt->execute(array_values($data));
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51262045

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档