Kontynuujemy zagadnienia bazodanowe. Na początek stworzymy sobie coś, co wkrótce przeobrazi się w Model. Do dzieła!
W naszej bazie danych (w phpMyAdmin) tworzymy tabelę people, do której można wpisywać name, age oraz ID jako auto-increment primary key.
Następnie tam gdzie skończyliśmy poprzednio:
$conn = new PDOConnection();
$conn->connect();
$conn = $conn->getConnection();
$stmt = $conn->prepare("INSERT INTO people (name, age) VALUES (:name, :age)");
$name = "John";
$age = 30;
$stmt->bindParam(":name", $name);
$stmt->bindParam(":age", $age);
if($stmt->execute()){
echo "statement successfull";
}
Jeżeli dopisało nam do bazy danych to wykomentujmy:
$conn = new PDOConnection();
$conn->connect();
$conn = $conn->getConnection();
/*
$stmt = $conn->prepare("INSERT INTO people (name, age) VALUES (:name, :age)");
$name = "John";
$age = 30;
$stmt->bindParam(":name", $name);
$stmt->bindParam(":age", $age);
if($stmt->execute()){
echo "statement successfull";
}
*/
$tablename = 'people';
$keys = ['name', 'age'];
$insertData = ['name' => 'Jane', 'age' => 20];
Zastanówmy się, jak teraz Jane dopisać do tej bazy danych z podanych zmiennych. Funkcją na razie:
$tablename = 'people';
$keys = ['name', 'age'];
$insertData = ['name' => 'Jane', 'age' => 20];
function createModel($data, $keys, $tablename, $con) {
$keysString = "(" . implode(", ", $keys) . ")";
$keysPrepared = array_map(fn($el) => ":".$el, $keys);
$valuesString = "(" . implode(", ", $keysPrepared) . ")";
$query = "INSERT INTO $tablename $keysString VALUES $valuesString";
echo $query;
}
createModel($insertData, $keys, $tablename, $conn);
//INSERT INTO people (name, age) VALUES (:name, :age)
Okej, idziemy do przodu. Teraz potrzebny parameter-binding:
$tablename = 'people';
$keys = ['name', 'age'];
$insertData = ['name' => 'Jane', 'age' => 20];
function createModel($data, $keys, $tablename, $con) {
$keysString = "(" . implode(", ", $keys) . ")";
$keysPrepared = array_map(fn($el) => ":".$el, $keys);
$valuesString = "(" . implode(", ", $keysPrepared) . ")";
$query = "INSERT INTO $tablename $keysString VALUES $valuesString";
$stmt = $con->prepare($query);
foreach($data as $key => $value){
$stmt->bindParam(":$key", $value);
}
return $stmt->execute();
}
if(createModel($insertData, $keys, $tablename, $conn)){
echo "Jane added!";
}
Ok, pomyślmy jak to ubrać w model. W takich właśnie sytuacjach wychodzi, że OOP upraszcza a nie komplikuje sprawy.
Odpowiedź – w następnym odcinku!