Так вот что я хотел бы достичь. Я хотел бы использовать PDO, joust, так как мне это нравится, но я хотел бы добавить некоторые новые методы поверх PDO.PHP - расширение объекта данных PHP для добавления новой функциональности
как: обновление(), вставить(), удалить(), fetchAllAssoc(), и т.д. ...
Так что я должен был бы работать как с PDO и PDO Ведомость объектов из внутри одного класса. Beacuse для обновления, мне нужно было бы построить запрос, подготовить() его, чтобы вернуть объект Statement PDO, а затем мне пришлось бы привязывать Values и затем выполнять.
Это то, что я сделал до сих пор:
<?php
namespace Database\DBAL;
use PDO;
class Database extends PDO
{
protected static $instance;
public static function getInstance()
{
if(empty(static::$instance))
{
// This will be fetched from config
$dns = "mysql:host=localhost;dbname=db_name";
$username = "root";
$password = "my_pwd";
static::$instance = new Database($dns, $username, $password);
}
return static::$instance;
}
/**
* Detect param type
*/
protected function detectType($value)
{
if(is_string($value))
{
return PDO::PARAM_STR;
}
else if(is_int($value))
{
return PDO::PARAM_INT;
}
else if(is_null($value))
{
return PDO::PARAM_NULL;
}
else if(is_bool($value))
{
return PDO::PARAM_BOOL;
}
else
{
return false;
}
}
/**
* Updates table
*/
public function update($table, $data, $identifier)
{
$set = array();
foreach ($data as $columnName => $columnValue) {
$set[] = $columnName . ' = ?';
}
$query = 'UPDATE ' . $table . ' SET ' . implode(', ', $set) . ' WHERE ' . implode(' = ? AND ', array_keys($identifier)) . ' = ?';
$params = array_merge(array_values($data), array_values($identifier));
array_unshift($params, null);
unset($params[0]);
echo $query;
$pdos = static::$instance->prepare($query);
foreach($params as $key => $param)
{
$pdos->bindValue($key, $param, $this->detectType($param));
}
return $pdos->execute();
}
}
?>
Вы бы использовать его как это:
use Database\DBAL\Database;
$db = Database::getInstance();
$db->update("users", array("user_password" => "new password"), array("user_id" => 1));
Мой вопрос, это правильный способ сделать это? Я читал о декораторе и фасадном узоре, и он доцент выглядел так. Каков наилучший способ расширить класс PDO с помощью моих методов, которые бы выполняли простые удаления, вставляли и извлекали некоторые данные? И я хочу, чтобы PDO был неповрежденным, поэтому я могу использовать его так, как я обычно делал ... Какую модель мне следует использовать, и какой был бы лучший способ?
Спасибо!
Считаете ли вы, что работаете с orm как доктрина? –
ну не совсем, я использовал Doctrine DBAL, и мне это нравится, но я думаю, что он может стать лучше, чем API DBAL. Мне не нужен ORM, joust DBAL, но мне нужно больше методов, поэтому мне может быть проще получить данные, и мне нужно все, что защищено от SQL-инъекции, и это не относится к Doctrine DBAL. Поэтому я хотел бы построить нечто похожее на Doctrine DBAL, но проще, joust PDO с некоторыми дополнительными функциями, и все, что мне нужно, - это найти, какие шаблоны я должен использовать, и какой лучший способ расширить PDO. – Limeni