Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP动态更新函数错误?_Php_Mysql - Fatal编程技术网

PHP动态更新函数错误?

PHP动态更新函数错误?,php,mysql,Php,Mysql,我基于fetch函数创建了这个动态更新函数(相同的方法,只是SET的另一个数组) 但它似乎有一个错误 public function update($table, $columns = array(), array $criteria = null) { // The query base $query = "UPDATE $table"; $query .= ' SET ' . implode(', ', array_map(f

我基于fetch函数创建了这个动态更新函数(相同的方法,只是SET的另一个数组)

但它似乎有一个错误

    public function update($table, $columns = array(), array $criteria = null)
    {
        // The query base
        $query = "UPDATE $table";

        $query .= ' SET ' . implode(', ', array_map(function($column) {
            return "$column = ?";
        }, array_keys($columns)));

        // Start checking
        if ($criteria) {
            $query .= ' WHERE ' . implode(' AND ', array_map(function($column) {
                return "$column = ?";
            }, array_keys($criteria)));
        }

        $update = $this->pdo->prepare($query) or die('An error has occurred with the following message:' . $query);
        $update->execute(array_values($criteria));
    }
这就是我得到的错误(第179行=`$update->execute(array_values($columns,$criteria));):

怎么了?为什么我会犯这样的错误

编辑新错误:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens' in C:\xampp\htdocs\argonite\includes\class\MYSQL\Database.class.php:179 Stack trace: #0 C:\xampp\htdocs\argonite\includes\class\MYSQL\Database.class.php(179): PDOStatement->execute(Array) #1 C:\xampp\htdocs\argonite\index.php(8): Database->update('argonite_server...', Array, Array) #2 {main} thrown in C:\xampp\htdocs\argonite\includes\class\MYSQL\Database.class.php on line 179

此处的语法错误:

array_values($columns, $criteria)
由于array_values()函数由1个参数调用,您将传递2个参数。因此,删除任何一个并在此函数中传递数组

更多信息请阅读此处:。

它应该是:

$update->execute(array_merge(array_values($columns), array_values($criteria)));

array\u merge
将连接
$列
$条件

使用辅助函数的这种方法是错误的

您真正需要的是一个支持几种扩展占位符类型的泛型query()函数。或者,至少

通过这种方式,您将获得如下内容:

$allowed = array("name","surname","email","password"); // allowed fields

$sql = "UPDATE users SET ".pdoSet($allowed,$values)." WHERE id = :id";
$stm = $dbh->prepare($sql);
$values['id'] = $_POST['id'];
$stm->execute($values);

array_values()只需要1个参数,2个给定nphp.net/manual/en/function.array-values.php此函数易受sql攻击injection@YourCommonSense仅当列名是用户提供的。此问题似乎与主题无关,因为它是关于在没有$columns的情况下读取d*%#错误消息,我将只获取缺少的参数SQL error,为什么?@junatanmdasted因为数组_值使得值0,1,2的索引及其需要参数,所以我认为您不应该使用此函数。它是否仍然说“未绑定任何参数”?绑定变量的数量与令牌的数量不匹配