如何重用我的查询方法在PHP中插入和获取数据库中的数据?

时间:2017-01-29 17:21:05

标签: pdo mysql-error-1064

我为我的类创建了一个查询方法,它可以从数据库中获取数据但是当我开始插入时不起作用。

我的查询方法就是这个。

function query($sql, $params = array()) {
        $query = $this->_conn->prepare($sql);
        if(count($params)) {
            $position = 1;
            foreach($params as $param) {
                $query->bindValue($position, $param);
                $position++;
            }
        }

        if($query->execute()) { //error is here based on the error message: SQLSTATE[42000]
            $result = $query->fetchAll(PDO::FETCH_ASSOC);
        } else {
            return false;
        }


        return $result;
    }

当我调用上面的查询时,它出错了。

function insert($table, $data) {
        if(count($data)) {
            $keys = array_keys($data);
            $values = "";

            $counter =1;
            foreach($data as $field) {
                $values .= "?";
                if($counter < count($field)) {
                    $values .= ", ";
                }
                $counter++;
            }
            $sql = "INSERT INTO {$table} (`". implode('`, `',$keys) ."`) VALUES {$values}";
            if($this->query($sql, $data)) { //calling the method above
                return true;
            } 
        }

        return false;
    }
  

我认为错误在查询方法中,它只能用于获取   数据。我怎样才能使它变得灵活(比如兼顾抓取和抓取)   插入等数据)?

1 个答案:

答案 0 :(得分:0)

首先讲述你的功能。这是过度和有限的同时。你真正需要的是

function query($sql, $params = array()) {
    $query = $this->_conn->prepare($sql);
    $query->execute($params);
    return $query;
}

因此,您只需将其称为

即可获得现有功能
$db->query($sql)->fetchAll();

但是可以用任何其他类型的查询来调用它,包括删除和插入,更不用说使用命名占位符和位置占位符以及使用其他链接方法,如fetch()或rowCount()

现在给你的错误信息。 显然它与你的功能无关,但你运行的是QUERY。当询问如何重用查询方法来插入查询时,你必须提供一个真正的插入查询,而不是一些带有错误结果的乱码PHP代码。确保您的行为与您的言论相关非常重要。想测试一个插入查询?使用查询,而不是PHP代码!

最后,插入助手。除了明显的语法问题外,它基本上是prone to SQL injection,因此您必须至少转义标识符或更好地将它们列入白名单。