Комментарий Найджела Рена верен, но, поскольку у меня была такая же проблема пару лет, go вот ссылка, которую я использовал в то время. Также есть примеры использования. Сверните свой собственный класс PDO
Ниже вы видите мой класс Database, который я создал на основе этого примера, и некоторые константы, которые я использую в этом классе, а также один простой пример использования.
define("DB_USER", "yourUser");
define("DB_PASS", "yourPassword");
define("DB_HOST", "localhost");
define("DB_NAME", "yourDBName");
define("DB_CHARSET", "utf8mb4");
//create new database handler
$dbh = new Database();
//sample query
$dbh->query('SELECT var FROM table WHERE user_id = :id');
$dbh->bind(':id', $id );
$result = $dbh->resultsetAssoc(); // a two dimensional array is returned
foreach ($result as $values) {
//do something with $values["var"]
}
class Database
{
private $host = DB_HOST;
private $dbname = DB_NAME;
private $charset = DB_CHARSET;
private $user = DB_USER;
private $pass = DB_PASS;
private $dbh;
private $error;
private $stmt;
public function __construct() {
// Set DSN
$dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname . ';charset=' . $this->charset;
// Set options
$options = array(
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
);
// Create a new PDO instanace
try{
$this->dbh = new PDO($dsn, $this->user, $this->pass, $options);
}
catch(PDOException $e) {
$this->error = $e->getMessage();
file_put_contents('PDOErrors.txt', $this->error, FILE_APPEND);
die ("Database Connection Error");
}
}
public function query($query) {
$this->stmt = $this->dbh->prepare($query);
}
public function bind($param, $value, $type = null){
//determine type as input for bindValue
if (is_null($type)) {
switch (true) {
case is_int($value):
$type = PDO::PARAM_INT;
break;
case is_bool($value):
$type = PDO::PARAM_BOOL;
break;
case is_null($value):
$type = PDO::PARAM_NULL;
break;
default:
$type = PDO::PARAM_STR;
}
}
// PDO method bindValue (PDOStatement::bindValue)
$this->stmt->bindValue($param, $value, $type);
}
public function execute(){
return $this->stmt->execute();
}
// This is returned by resultset():
// Multidimemnsional array with column labeled values
// and numbered values
// Array
//(
// [0] => Array
// (
// [name] => pear
// [0] => pear
// [colour] => green
// [1] => green
// )
//
// [1] => Array
// (
// [name] => watermelon
// [0] => watermelon
// [colour] => pink
// [1] => pink
// )
//
//)
public function resultset(){
$this->execute();
return $this->stmt->fetchAll();
}
// This is returned by resultsetAssoc():
// Multidimemnsional array with column labeled values
// and NO numbered values
// Array
//(
// [0] => Array
// (
// [name] => pear
// [colour] => green
// )
//
// [1] => Array
// (
// [name] => watermelon
// [colour] => pink
// )
//
//)
public function resultsetAssoc(){
$this->execute();
return $this->stmt->fetchAll(PDO::FETCH_ASSOC);
}
// With single():
// The array has only one dimension!!!
public function single(){
$this->execute();
return $this->stmt->fetch();
}
// With singleAssoc():
// The array has only one dimension!!!
public function singleAssoc(){
$this->execute();
return $this->stmt->fetch(PDO::FETCH_ASSOC);
}
public function rowCount(){
return $this->stmt->rowCount();
}
public function lastInsertId(){
return $this->dbh->lastInsertId();
}
public function beginTransaction(){
return $this->dbh->beginTransaction();
}
public function endTransaction(){
return $this->dbh->commit();
}
public function inTransaction(){
return $this->dbh->inTransaction();
}
public function cancelTransaction(){
return $this->dbh->rollBack();
}
public function debugDumpParams(){
return $this->stmt->debugDumpParams();
}
// array is returned: [0] SQLSTATE, [1] some useless error code [2] error message
public function errorInfo() {
return $this->stmt->errorInfo();
}
}