Оцените пожалуйста. Какие есть недостатки в текущем классе, если делать его не слишком крутым? Как быть с биндами, стоит ли биндить вручную? Если в execute передать массив, то по умолчанию, все значения биндяться в Код (Text): PDO::PARAM_STR PHP: <?php class QueryBuilder { public $pdo; public $dsn = 'mysql:host=localhost; dbname=crud'; public $username = 'root'; public $password = ''; public function __construct() { $this->pdo = new PDO($this->dsn, $this->username, $this->password); } function getAllTask() { $sql = "SELECT * FROM `tasks`"; $statement = $this->pdo->prepare($sql); $result = $statement->execute(); // true or false $tasks = $statement->fetchAll(PDO::FETCH_ASSOC); return $tasks; } function getTask($id) { $statement = $this->pdo->prepare("SELECT * FROM tasks WHERE id=:id"); $statement->bindParam(":id", $id); $statement->execute(); $task = $statement->fetch(PDO::FETCH_ASSOC); return $task; } function addTask($table, $data) { $keys = implode(', ', array_keys($data)); //ключи из массива POST $placeholders = ':' . implode(', :', array_keys($data)); //плейсхолдеры из массива POST $sql = "INSERT INTO $table ($keys) VALUES ($placeholders)"; $statement = $this->pdo->prepare($sql); //значения подставляются автоматически $statement->execute($data); //true || false } function editTask($table, $data) { $sets = ''; foreach($data as $k => $v){ $sets .= $k . '=:' . $k . ', '; } $sets = rtrim($sets); $sets = rtrim($sets, ','); $sql = "UPDATE $table SET $sets WHERE id = :id"; $statement = $this->pdo->prepare($sql); $statement->execute($data); } function deleteTask($id) { $id = (int)$_GET['id']; $sql = 'DELETE FROM tasks WHERE id=:id'; $statement = $this->pdo->prepare($sql); $statement->bindParam(":id", $id); $statement->execute(); } } create.php PHP: <!doctype html> <html lang="en"> <head> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> </head> <body> <div class="container"> <div class="row"> <div class="col-md-12"> <h1>Create Task</h1> <form action="/store.php" method="post"> <div class="form-group"> <input type="text" class="form-control" name="title"> </div> <div class="form-group"> <textarea name="content" class="form-control"></textarea> </div> <div class="form-group"> <button class="btn btn-success" type="submit">Submit</button> </div> </form> </div> </div> </div> </body> </html> store.php PHP: <?php require 'QueryBuilder.php'; $db = new QueryBuilder(); $db->addTask('tasks', $_POST); header("Location: /"); exit; edit.php PHP: <?php require 'QueryBuilder.php'; $db = new QueryBuilder(); $task = $db->getTask($_GET['id']); ?> <!doctype html> <html lang="en"> <head> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> </head> <body> <div class="container"> <div class="row"> <div class="col-md-12"> <h1>Edit Task</h1> <form action="/update.php?id=<?= $task['id'];?>" method="post"> <div class="form-group"> <input type="text" name="title" class="form-control" value="<?= $task['title'];?>"> </div> <div class="form-group"> <textarea name="content" class="form-control"><?= $task['content'];?></textarea> </div> <div class="form-group"> <button class="btn btn-warning" type="submit">Submit</button> </div> </form> </div> </div> </div> </body> </html> update.php PHP: <?php require 'QueryBuilder.php'; $db = new QueryBuilder(); $data = $_POST; $data['id'] = $_GET['id']; $db->editTask('tasks', $data); header("Location: /"); exit;
Тут не Query Builder. QueryBuilder - это когда можно PHP: $count = (new Query)->from("table")->where(["a" => 25, "b" => 43])->join("table2", "table1.table2_id=table2.id")->count(); --- Добавлено --- Т.е. QueryBuilder строит запросы. А это просто класс, который делает что-то с базой.
я сума сходил когда делал это https://github.com/MouseZver/Lerma/blob/master/src/Lerma/Database/Placebo.php https://github.com/MouseZver/Lerma/blob/master/src/Lerma/Database/Compile.php