count():参数#1 ($var)必须是php 8中的Countable|array类型


public function query($sql, $params = []){
$this->_error = false;
if ($this->_query = $this->_pdo->prepare($sql)) {
$x = 1;
if (count($params)) {
foreach ($params as $param) {
$this->_query->bindValue($x, $param);
$x++;
}
}
if ($this->_query->execute()) {
$this->_result = $this->_query->fetchAll(PDO::FETCH_OBJ);
$this->_count = $this->_query->rowCount();
$this->_lastInsetID = $this->_pdo->lastInsertId();
} else {
$this->_error = true;
}
}

代码可以在PHP 7.2中运行,但不能在PHP 7.4中运行&php 8

致命错误:Uncaught TypeError: count():参数#1 ($var)必须为可计数类型|数组,字符串

当使用is_countable时另一个错误

致命错误:Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064您的SQL语法错误;

Apache/2.4.46 (Win64) OpenSSL/1.1.1 PHP/8.0.2数据库客户端版本:libmysql - mysqlnd 8.0.2PHP扩展:mysqli Documentation curl Documentation mbstring DocumentationPHP版本:8.0.2版本信息:5.0.4

public function query($sql, $params = []){
$this->_error = false;
if($this->_query=$this->_pdo->prepare($sql)){
$x=1;
if (count($params)){
foreach($params as $param){
$this->_query->bindValue($x, $param);
$x++;
}
}

if($this->_query->execute()){
$this->_result=$this->_query->fetchAll(PDO::FETCH_OBJ);
$this->_count = $this->_query->rowCount();
$this->_lastInsetID=$this->_pdo->lastInsertId();
}else {
$this->_error=true;
}
}
return $this;
}

public function insert($table, $fields = []){
$fieldString='';
$valueString ='';
$values =[];
foreach($fields as $field => $value){
$fieldString .='`' . $field . '`,';
$valueString .= '?,';
$values[] = $value;
}
$fieldString = rtrim($fieldString, ',');
$valueString = rtrim($valueString, ',');
$sql = "INSERT INTO {$table} ({$fieldString}) VALUES ({$valueString})";
dnd($sql);
if(!$this->query($sql, $value)->error()){
return true;

}
return false;
}

传递的值

public function registerAction(){       
$db = DB::getInstance();
$fields = [
'fname' => 'Name',
'lname' => 'name',
'email' => 'email@mail.com'
];
$accountQ = $db->insert('account', $fields);

}

PHP自7.2版以来一直这样做-参数必须是一个数组或实现可计数接口的对象。您将一个字符串传递给这个方法,因此出现了问题。is_countable函数保存了这种情况,但是在sql查询中出现了一些错误。您可能使用了关键字,但没有将其括在'

之间。

最新更新