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!