когда я хочу использовать $this->stmt->bindValue()
в bindvalue php storm выдает ошибку:
bindvalue метода не найдено в PDO
и когда я запускаю коды, я вижу эту ошибку:
«PDOStatement :: execute (): SQLSTATE [HY093]: недопустимый номер параметра: параметр не был определен в C: \ xampp \ htdocs \ oop \ app \ Model \ DB.php в строке 54
<?php namespace App\Model;
class DB
{
/**
* @var PDO <--- need by PhpStorm to find Methods of PDO
*/
protected $table ;
/**
* @var PDO <--- need by PhpStorm to find Methods of PDO
*/
protected $stmt ;
protected $bind=[] ;
protected $fetchMode = \PDO::FETCH_OBJ ;
public function __construct()
{
$config= require_once (__DIR__.'/../config.php') ;
try{
$this->pdo = new \PDO("mysql:host=127.0.0.1;dbname={$config['db']['database']}",$config['db']['username']
,$config['db']['password']) ;
} catch (\Exception $e)
{
die($e->getMessage());
}
} // end of constructor
public function select()
{
$stmt = $this->pdo->prepare("SELECT * FROM {$this->table}") ;
$stmt->execute();
return $stmt->fetchAll() ;
} // end of select method
public function create($data)
{
$field = join(',',array_keys($data)) ;
$param = ':'. join(', :' , array_keys($data)) ;
$this->stmt = $this->pdo->prepare("INSERT INTO $this->table ($field) VALUES ($param)") ;
$this->bind = $data ;
$this->bindValue() ;
return $this->stmt->execute();
}
public function bindValue()
{
var_dump($this->stmt);
foreach ($this->bind as $key => $value){
$this->stmt->bindValue(":$key " , $value) ; //error
}
}
} // end of DB class
bindvalue метода не найдено в PDO
Это правильно. PDO класс представляет соединение с базой данных, а не отдельный запрос / оператор. Для этого есть PDOStatement учебный класс.
Других решений пока нет …