Skip to content

7. SGBD ve MySql'in kullanımı

MySQL veritabanını kullanarak PHP komut dosyaları yazacağız:

SGBD ve MySQL, WampServer paketine dahildir (bkz. 2.1.1. paragraf). Bir veritabanı ve MySQL adlı bir kullanıcıyı nasıl oluşturacağınızı gösteriyoruz.

  • WampServer başlatıldıktan sonra, görev çubuğunun sağ alt köşesindeki [1] simgesinden yönetilebilir.
  • [2]'te, MySQL yönetim aracı başlatılır

[dbpersonnes] veritabanı oluşturulur:

Image

[admpersonnes] adlı bir kullanıcı, [nobody] şifresiyle oluşturulur:

  • [1] olarak değiştirildi, kullanıcı adı
  • [2], SGBD makinesinde kendisine haklar verilir
  • [3]'te, şifresi
  • [4]'te, aynı şekilde
  • [5]'te, bu kullanıcıya hiçbir yetki verilmez
  • [6]'te, bu kullanıcı oluşturulur
  • [7]'te, phpMyAdmin'in ana sayfasına geri dönülür
  • [8]'te, bu sayfadaki [Privileges] bağlantısını kullanarak [admpersonnes] ve [9] kullanıcılarının bilgilerini düzenlemeye gidilir.

1011

Image

  • [10]'te, [admpersonnes] kullanıcısına [dbpersonnes] veritabanı üzerinde haklar vermek istediğimizi belirtiriz
  • [11]'te seçim onaylanır
  • seçimi, [12] bağlantısıyla onaylanır. [Tout cocher]'te, [admpersonnes] kullanıcısına [dbpersonnes] ve [13] veritabanları üzerinde tüm haklar verilir.
  • [14]'te onaylıyoruz

Artık elimizde şunlar var:

  • bir MySQL [dbpersonnes] veritabanı
  • bu veritabanı üzerinde tüm haklara sahip bir kullanıcı: [admpersonnes / nobody]

Veritabanını kullanmak için PHP komut dosyaları yazacağız. PHP, veritabanlarını yönetmek için çeşitli kütüphanelere sahiptir. PHP kodu ile SGBD arasında arayüz görevi gören PDO (PHP Data Objects) kütüphanesini kullanacağız:

PDO kütüphanesi, PHP komut dosyasının, kullanılan SGBD'in tam doğasından bağımsız çalışmasını sağlar. Böylece yukarıdaki örnekte, SGBD MySQL, SGBD Postgres ile değiştirilebilir ve bu, PHP betiğinin koduna minimum düzeyde etki eder. Bu kütüphane varsayılan olarak mevcut değildir. 'in kullanılabilirliğini şu şekilde kontrol edebilirsiniz:

  • 1: WampServer yönetim simgesinden [PHP / PHP extensions] seçeneğini seçin
  • 2: Kullanılabilir farklı PDO uzantıları ve aktif olanlar görüntülenir: [PHP_pdo_mysql], SGBD ve MySQL için, [PHP_pdo_sqlite] (SGBD için) ve SQL Lite. Bir uzantıyı etkinleştirmek için üzerine tıklamanız yeterlidir. PHP yorumlayıcısı, yeni uzantı etkinleştirilmiş olarak yeniden başlatılır.

7.1. MySQL – 1 (mysql_01) veritabanına bağlanma

SGBD'e bağlantı, bir PDO nesnesinin oluşturulmasıyla sağlanır. Oluşturucu, çeşitli parametreleri kabul eder:

$dbh=new PDO($dsn,$user,$passwd,$driver_options)

Parametrelerin anlamları şöyledir:

$dsn
(Veri Kaynağı Adı), SGBD'in türünü ve internet üzerindeki konumunu belirten bir dizedir.
"mysql:host=localhost" dizesi, yerel sunucuda çalışan bir SGBD MySQL ile karşı karşıya olduğumuzu gösterir. Bu dize
, SGBD'in dinleme bağlantı noktası ve
bağlanmak istediğiniz veritabanının adı: "mysql:host=localhost:port=3306:dbname=dbpersonnes".
$user
bağlanan kullanıcının kimliği
$passwd
şifresi
$driver_options
SGBD sürücüsü için bir seçenek tablosu

Yalnızca ilk parametre zorunludur. Bu şekilde oluşturulan nesne, daha sonra bağlanılan veritabanında gerçekleştirilen tüm işlemlerin temelini oluşturacaktır. PDO nesnesi oluşturulamazsa, PDOException türünde bir istisna atılır.

İşte bir bağlantı örneği:


<?php

// bir veritabanına bağlanma MySql
// kullanıcı kimliği (admpersonnes, nobody)
$ID = "admpersonnes";
$PWD = "nobody";
$HOTE = "localhost";

try {
  // oturum açma
  $dbh = new PDO("mysql:host=$HOTE", $ID, $PWD);
  print "Connexion réussie\n";
  // kapatma
  $dbh = null;
} catch (PDOException $e) {
  print "Erreur : " . $e->getMessage() . "\n";
  exit();
}

Sonuçlar:

Connexion réussie

Açıklamalar

    1. satır: SGBD nesnesine bağlantı, bir PDO nesnesinin oluşturulmasıyla sağlanır. Oluşturucu burada aşağıdaki parametrelerle kullanılır:
    2. SGBD'in niteliğini ve internetteki konumunu belirten bir dize. "mysql:host=localhost" dizesi, yerel sunucuda çalışan bir SGBD MySQL ile karşı karşıya olduğumuzu gösterir. Bağlantı noktası belirtilmemiştir. Bu durumda varsayılan olarak 3306 numaralı bağlantı noktası kullanılır. Veritabanı adı da belirtilmemiştir. Bu durumda SGBD ve MySQL'e bağlantı kurulur; belirli bir veritabanının seçimi daha sonra yapılır.
    3. bir kullanıcı adı
    4. şifresi
    1. satır: Bağlantı, başlangıçta oluşturulan PDO nesnesinin imha edilmesiyle sonlandırılır.
    1. satır: SGBD'e bağlantı başarısız olabilir. Bu durumda, PDOException türünde bir istisna atılır.

7.2. MySQL (mysql_02) tablosunun oluşturulması


<?php

// MySql veritabanına bağlantı
// kullanıcı kimliği
$ID = "admpersonnes";
$PWD = "nobody";
// veritabanı kimliği
$DSN = "mysql:host=localhost;dbname=dbpersonnes";

// bağlantı
list($erreur, $connexion) = connecte($DSN, $ID, $PWD);
if ($erreur) {
  print "Erreur lors de la connexion à la base [$DSN] sous l'identité ($ID,$PWD) : $erreur\n";
  exit;
}

// varsa "kişiler" tablosunun silinmesi
$requête = "drop table personnes";
$erreur = exécuteRequête($connexion, $requête);
//bir hata mı oluştu?
if ($erreur)
  print "$requête : Erreur ($erreur)\n";
else
  print "$requête: Exécution réussie\n";
// "kişiler" tablosunun oluşturulması
$requête = "create table personnes (prenom varchar(30) NOT NULL, nom varchar(30) NOT NULL, age integer NOT NULL, primary key(nom,prenom))";
$erreur = exécuteRequête($connexion, $requête);
//Bir hata mı oluştu?
if ($erreur)
  print "$requête : Erreur ($erreur)\n";
else
  print "$requête: Exécution réussie\n";
// bağlantı kesiliyor ve programdan çıkılıyor
déconnecte($connexion);
exit;

// ---------------------------------------------------------------------------------
function connecte($dsn, $login, $pwd) {
  // ($login,$pwd) $dsn veritabanına bağlanıyor
  // bağlantı kimliğini ve bir hata kodunu döndürür
  try {
    // bağlantı
    $dbh = new PDO($dsn, $login, $pwd);
    // hatasız dönüş
    return array("", $dbh);
  } catch (PDOException $e) {
    // hata ile geri dönüş
    return array($e->getMessage(), null);
  }
}

// ---------------------------------------------------------------------------------
function déconnecte($connexion) {
  // $connexion ile tanımlanan bağlantıyı kapatır
  $connexion = null;
}

// ---------------------------------------------------------------------------------
function exécuteRequête($connexion, $sql) {
  // $sql isteğini $connexion bağlantısı üzerinden yürütür
  try {
    $connexion->exec($sql);
    // hata olmadan geri döner
    return "";
  } catch (PDOException $e) {
    // hata ile geri döndü
    return $e->getMessage();
  }
}

Sonuçlar:

drop table personnes: Exécution réussie
create table personnes (prenom varchar(30) NOT NULL, nom varchar(30) NOT NULL, age integer NOT NULL, primary key(nom,prenom)): Exécution réussie

PHPMyAdmin'te şu tablonun varlığı görülebilir:

 

Açıklamalar

  • 38-50. satırlar: connecte işlevi, bir SGBD'e bağlantı oluşturur. Bu işlev, bir dizi ($erreur, $connexion) döndürür; burada $connexion oluşturulan bağlantıdır, bağlantı oluşturulamamışsa ise null döndürülür. İkinci durumda, $erreur bir hata mesajıdır.
  • 53-56. satırlar: déconnecte işlevi bir bağlantıyı kapatır
    1. satır: exécuteRequête işlevi, bir bağlantı üzerinde SQL komutunun yürütülmesini sağlar. Bağlantı, bir PDO nesnesidir. Bir PDO nesnesi üzerinde bir SQL emrini yürütmek için kullanılan yöntem exec yöntemidir (satır 63). Sorgunun yürütülmesi bir PDOException'i tetikleyebilir. Bu nedenle bu durum da yönetilir. İşlev, hata durumunda bir hata mesajı, aksi takdirde boş bir dize döndürür.

7.3. Kişiler tablosunun doldurulması (mysql_03)

Aşağıdaki komut dosyası, aşağıdaki [creation.txt] metin dosyasında bulunan SQL komutlarını yürütür:

drop table personnes
create table personnes (prenom varchar(30) not null, nom varchar(30) not null, age integer not null, primary key (nom,prenom))
insert into personnes values('Paul','Langevin',48)
insert into personnes values ('Sylvie','Lefur',70)
insert into personnes values ('Pierre','Nicazou',35)
insert into personnes values ('Geraldine','Colou',26)
insert into personnes values ('Paulette','Girond',56)

<?php

// MySql veritabanına bağlanıyor
// kullanıcı kimliği
$ID = "admpersonnes";
$PWD = "nobody";
// veritabanı kimliği
$DSN = "mysql:host=localhost;dbname=dbpersonnes";
// çalıştırılacak SQL komut metin dosyasının kimliği
$TEXTE = "creation.txt";

// bağlantı
list($erreur, $connexion) = connecte($DSN, $ID, $PWD);
if ($erreur) {
  print "Erreur lors de la connexion à la base [$DSN] sous l'identité ($ID,$PWD) : $erreur\n";
  exit;
}

// tablonun oluşturulması ve doldurulması
$erreurs = exécuterCommandes($connexion, $TEXTE, 1, 0);
//hata sayısının görüntülenmesi
print "il y a eu $erreurs[0] erreurs\n";
for ($i = 1; $i < count($erreurs); $i++)
  print "$erreurs[$i]\n";

// bağlantı kesilir ve programdan çıkılır
déconnecte($connexion);
exit;

// ---------------------------------------------------------------------------------
function connecte($dsn, $login, $pwd) {
...
}

// ---------------------------------------------------------------------------------
function déconnecte($connexion) {
 ...
}

// ---------------------------------------------------------------------------------
function exécuteRequête($connexion, $sql) {
  // $sql sorgusunu $connexion bağlantısı üzerinden çalıştırır
  // hata varsa 1 hata mesajı döndürür, yoksa boş dize döndürür
  ...
}

// ---------------------------------------------------------------------------------
function exécuterCommandes($connexion, $SQL, $suivi=0, $arrêt=1) {
  // $connexion bağlantısını kullanır
  // $SQL metin dosyasında bulunan SQL komutlarını yürütür
  // bu dosya, her satırda bir tane olmak üzere çalıştırılacak SQL komut dosyasıdır
  // eğer $suivi=1 ise, her bir SQL komutunun yürütülmesi üzerine, komutun başarılı olup olmadığını belirten bir mesaj görüntülenir
  // $arrêt=1 ise, işlev karşılaşılan ilk hatada durur; aksi takdirde tüm SQL komutlarını yürütür
  // fonksiyon bir dizi döndürür (hata sayısı, hata1, hata2, ...)
  
  // $SQL dosyasının varlığı kontrol edilir
  if (! file_exists($SQL))
    return array(1, "Le fichier $SQL n'existe pas");

  // $SQL dosyasında bulunan SQL sorgularının yürütülmesi
  // bunlar bir tabloya eklenir
  $requêtes = file($SQL);
  // yürütülür – başlangıçta hata yok
  $erreurs = array(0);
  for ($i = 0; $i < count($requêtes); $i++) {
    //Boş bir sorgu mu var?
    if (preg_match("/^\s*$/", $requêtes[$i]))
      continue;
    // $i sorgusunun çalıştırılması
    $erreur = exécuteRequête($connexion, $requêtes[$i]);
    //bir hata mı oluştu?
    if ($erreur) {
      // bir hata daha
      $erreurs[0]++;
      // hata mesajı
      $msg = "$requêtes[$i] : Erreur ($erreur)\n";
      $erreurs[] = $msg;
      // ekran izleme var mı, yok mu?
      if ($suivi)
        print "$msg\n";
      // duruyor muyuz?
      if ($arrêt)
        return $erreurs;
    } else
    if ($suivi)
      print "$requêtes[$i] : Exécution réussie\n";
  }//for
  // geri
  return $erreurs;
}

Ekran sonuçları:

drop table personnes : Exécution réussie
create table personnes (prenom varchar(30) not null, nom varchar(30) not null, age integer not null, primary key (nom,prenom)) : Exécution réussie
insert into personnes values('Paul','Langevin',48) : Exécution réussie
insert into personnes values ('Sylvie','Lefur',70) : Exécution réussie
insert into personnes values ('Pierre','Nicazou',35) : Exécution réussie
insert into personnes values ('Geraldine','Colou',26) : Exécution réussie
insert into personnes values ('Paulette','Girond',56) : Exécution réussie
il y a eu 0 erreurs

Yapılan eklemeler PhpMyAdmin ile görüntülenebilir:

 

Yorumlar

Yenilik, 48-90. satırlardaki exécuterCommandes işlevinde yatmaktadır. Bu işlev, $connexion bağlantısı üzerinden, $SQL adlı metin dosyasında bulunan SQL komutlarını yürütür. Bu işlev, bir hata tablosu ($nbErreurs, $msg1, $msg2, …) döndürür; burada $nbErreurs hata sayısıdır, $msgi ise hata mesajı numarasıdır. i. Hata yoksa, döndürülen dizi array(0) dizisidir.

7.4. Herhangi bir SQL sorgusunun yürütülmesi (mysql_04)

Aşağıdaki komut dosyası, aşağıdaki [sql.txt] metin dosyasındaki SQL komutlarının yürütülmesini gösterir:

select * from personnes
select nom,prenom from personnes order by nom asc, prenom desc
select * from personnes where age between 20 and 40 order by age desc, nom asc, prenom asc
insert into personnes values('Josette','Bruneau',46)
update personnes set age=47 where nom='Bruneau'
select * from personnes where nom='Bruneau'
delete from personnes where nom='Bruneau'
select * from personnes where nom='Bruneau'
xselect * from personnes where nom='Bruneau'

Bu SQL komutları arasında, veritabanından sonuçları döndüren select komutu, sonuç döndürmeden veritabanını değiştiren insert, update ve delete komutları ve son olarak da sonuncusu (xselect) gibi hatalı komutlar bulunmaktadır.


<?php

// veritabanına bağlantı MySql
// kullanıcı kimliği
$ID = "admpersonnes";
$PWD = "nobody";
// veritabanı kimliği
$DSN = "mysql:host=localhost;dbname=dbpersonnes";
// çalıştırılacak SQL komut metin dosyasının kimliği
$TEXTE = "sql.txt";

// bağlantı
list($erreur, $connexion) = connecte($DSN, $ID, $PWD);
if ($erreur) {
  print "Erreur lors de la connexion à la base [$DSN] sous l'identité ($ID,$PWD) : $erreur\n";
  exit;
}

// SQL komutlarının yürütülmesi
$erreurs = exécuterCommandes($connexion, $TEXTE, 1, 0);
//hata sayısının görüntülenmesi
print "il y a eu $erreurs[0] erreur(s)\n";
for ($i = 1; $i < count($erreurs); $i++)
  print "$erreurs[$i]\n";

// bağlantı kesilir ve programdan çıkılır
déconnecte($connexion);
exit;

// ---------------------------------------------------------------------------------
function connecte($dsn, $login, $pwd) {
  // ($login,$pwd) $dsn veritabanına bağlanıyor
  // bağlantı kimliğini ve bir hata mesajını döndürür
  ...
}

// ---------------------------------------------------------------------------------
function déconnecte($connexion) {
  ...
}

// ---------------------------------------------------------------------------------
function exécuteRequête($connexion, $sql) {
  //, $sql sorgusunu $connexion bağlantısı üzerinden yürütür
  // 2 elemanlı bir dizi döndürür ($erreur,$résultat)
  
  // bunun bir select olup olmadığı belirlenir
  $commande = "";
  if (preg_match("/^\s*(\S+)/", $sql, $champs)) {
    $commande = $champs[0];
  }
  // komutun yürütülmesi
  try {
    if (strtolower($commande) == "select") {
      $res = $connexion->query($sql);
    } else {
      $res = $connexion->exec($sql);
      if($res===FALSE){
        $info=$connexion->errorInfo();
        return array($info[2],null);
      }
    }
    // hata olmadan geri dönüş
    return array("", $res);
  } catch (PDOException $e) {
    // hata ile geri dönüş
    return array($e->getMessage(), null);
  }
}

// ---------------------------------------------------------------------------------
function exécuterCommandes($connexion, $SQL, $suivi=0, $arrêt=1) {
  // $connexion bağlantısını kullanır
  // $SQL metin dosyasında bulunan SQL komutlarını yürütür
  // bu dosya, her satırda bir tane olmak üzere çalıştırılacak SQL komut dosyasıdır
  // eğer $suivi=1 ise, her bir SQL komutunun yürütülmesi, komutun başarılı veya başarısız olduğunu belirten bir mesajın görüntülenmesiyle sonuçlanır
  // $arrêt=1 ise, işlev karşılaşılan ilk hatada durur; aksi takdirde tüm SQL komutlarını yürütür
  // fonksiyon bir dizi döndürür (hata sayısı, hata1, hata2, ...)
  // $SQL dosyasının varlığı kontrol edilir
  if (!file_exists($SQL))
    return array(1, "Le fichier $SQL n'existe pas");

  // $TEXTE dosyasında bulunan SQL sorguları yürütülür
  // bunlar bir tabloya eklenir
  $requêtes = file($SQL);
  // bunlar çalıştırılıyor - başlangıçta hata yok
  $erreurs = array(0);
  for ($i = 0; $i < count($requêtes); $i++) {
    //: Boş bir sorgu mu var?
    if (preg_match("/^\s*$/", $requêtes[$i]))
      continue;
    // $i sorgusu yürütülüyor
    list($erreur, $res) = exécuteRequête($connexion, $requêtes[$i]);
    //bir hata mı oluştu?
    if ($erreur) {
      // bir hata daha
      $erreurs[0]++;
      // hata mesajı
      $msg = "$requêtes[$i] : Erreur ($erreur)\n";
      $erreurs[] = $msg;
      // ekran izleme var mı, yok mu?
      if ($suivi)
        print "$msg\n";
      // durulacak mı?
      if ($arrêt)
        return $erreurs;
    } else
    if ($suivi) {
      print "$requêtes[$i] : Exécution réussie\n";
      // yürütülen sorgunun sonucu hakkında bilgiler
      afficherInfos($res);
    }
  }//for
  // geri dönüş
  return $erreurs;
}

// ---------------------------------------------------------------------------------
function afficherInfos($résultat) {
  // bir SQL sorgusunun sonucunu görüntüler $résultat
  // Bu bir SELECT sorgusu muydu?
  if ($résultat instanceof PDOStatement) {
    // alanların adları görüntüleniyor
    $titre = "";
    $nbColonnes = $résultat->columnCount();
    for ($i = 0; $i < $nbColonnes; $i++) {
      $infos = $résultat->getColumnMeta($i);
      $titre.=$infos['name'] . ",";
    }
    // son karakteri kaldırıyoruz,
    $titre = substr($titre, 0, strlen($titre) - 1);
    // alanların listesi görüntüleniyor
    print "$titre\n";
    // ayırıcı satır
    $séparateurs = "";
    for ($i = 0; $i < strlen($titre); $i++) {
      $séparateurs.="-";
    }
    print "$séparateurs\n";
    // veriler
    foreach ($résultat as $ligne) {
      $data = "";
      for ($i = 0; $i < $nbColonnes; $i++) {
        $data.=$ligne[$i] . ",";
      }

      // son karakteri kaldırır,
      $data = substr($data, 0, strlen($data) - 1);
      // görüntülenir
      print "$data\n";
    }
  } else {
    // bu bir select değildi
    print " $résultat lignes(s) a (ont) été modifiée(s)\n";
  }
}

Ekran sonuçları:

select * from personnes
 : Exécution réussie
prenom,nom,age
--------------
Geraldine,Colou,26
Paulette,Girond,56
Paul,Langevin,48
Sylvie,Lefur,70
Pierre,Nicazou,35
select nom,prenom from personnes order by nom asc, prenom desc : Exécution réussie
nom,prenom
----------
Colou,Geraldine
Girond,Paulette
Langevin,Paul
Lefur,Sylvie
Nicazou,Pierre
select * from personnes where age between 20 and 40 order by age desc, nom asc, prenom asc : Exécution réussie
prenom,nom,age
--------------
Pierre,Nicazou,35
Geraldine,Colou,26
insert into personnes values('Josette','Bruneau',46) : Exécution réussie
 1 lignes(s) a (ont) é modifiée(s)
update personnes set age=47 where nom='Bruneau' : Exécution réussie
 1 lignes(s) a (ont) é modifiée(s)
select * from personnes where nom='Bruneau' : Exécution réussie
prenom,nom,age
--------------
Josette,Bruneau,47
delete from personnes where nom='Bruneau' : Exécution réussie
 1 lignes(s) a (ont) é modifiée(s)
select * from personnes where nom='Bruneau' : Exécution réussie
prenom,nom,age
--------------
xselect * from personnes where nom='Bruneau' : Erreur (You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'xselect * from personnes where nom='Bruneau'' at line 1)

il y a eu 1 erreur(s)
xselect * from personnes where nom='Bruneau' : Erreur (You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'xselect * from personnes where nom='Bruneau'' at line 1)

Açıklamalar

[sql.txt] metin dosyasındaki her bir komut, 43. satırdaki exécuteRequête işlevi tarafından yürütülür.

    1. satır: İşlevin iki parametresi, SQL komutlarının yürütülmesi gereken bağlantı ($connexion) ve yürütülecek SQL komutudur ($sql). İşlev, iki değerden oluşan bir dizi ($erreur, $résultat) döndürür; burada
    2. $erreur, hata olmaması durumunda boş olabilen bir hata mesajıdır
    3. $résultat: SQL emrinin yürütülmesiyle elde edilen sonuç. Bu sonuç, emrin bir select emri mi, yoksa bir insert, update, delete emri mi olduğuna göre farklılık gösterir.
  • 48-51. satırlar: SQL siparişinin ilk elemanını alarak, söz konusu siparişin select mi yoksa insert, update, delete.
    1. satır: select komutu söz konusu olduğunda, bu komut [PDO]->query("select komutu") yöntemi ile yürütülür. Dönüş sonucu, PDOStatement türünde bir nesnedir.
    1. satır: insert, update, delete komutları söz konusu olduğunda, bu komutlar [PDO]->exec("SQL komutu") yöntemi ile yürütülür. Dönüş sonucu, SQL komutu tarafından değiştirilen satır sayısıdır. Dolayısıyla, SQL delete komutu iki satırı silerse, döndürülen sonuç 2 tamsayıdır. Yürütme sırasında bir hata oluşursa, döndürülen sonuç false boole değeridir. Bu durumda, [PDO]->errorinfo() yöntemi, hata hakkında bir değerler dizisi biçiminde bilgi verir. Bu dizinin 2 numaralı elemanı hata mesajıdır.
  • 58-60. satırlar: [PDO]->exec("SQL emri") işleminin olası hatasının işlenmesi.
  • 65-68. satırlar: Olası istisnanın işlenmesi
    1. satır: exécuterCommandes işlevi, $connexion bağlantısı üzerinden, $SQL metin dosyasında depolanan SQL komutlarını yürütür. Bu kod, tek bir ayrıntı dışında daha önce karşılaştığımız bir koddur: 111. satır.
    1. satır: exécuteRequête işlevi bir dizi döndürdü ($erreur, $résultat) veya $résultat, SQL komutunun yürütülmesinin sonucudur. Bu sonuç, SQL komutunun bir select komutu mu, yoksa bir insert, update, delete komutu mu olduğuna göre farklılık gösterir. afficherInfos işlevi, bu sonuçla ilgili bilgileri görüntüler.
    1. satır: SQL emri, select emri olsaydı, sonuç PDOStatement türünde olurdu. Bu tür, satır ve sütunlardan oluşan bir tabloyu temsil eder.
    1. satır: [PDOStatement]->getColumnCount() yöntemi, select'in sonuç tablosundaki sütun sayısını döndürür
    1. satır: [PDOStatement]->getMeta(i) yöntemi, select.'in sonuç tablosundaki i numaralı sütunla ilgili bilgileri içeren bir sözlük döndürür. Bu sözlükte, 'name' anahtarına atanan değer, sütunun adıdır.
  • 127-129. satırlar: select sonuç tablosundaki sütun adları bir karakter dizisi halinde birleştirilir.
  • 141-145. satırlar: PDOStatement türündeki bir nesne, bir foreach döngüsüyle taranabilir. Her yinelemede elde edilen öğe, select'in sonuç tablosundaki bir satırdır ve bu satırın farklı sütunlarındaki değerleri temsil eden bir değerler dizisi biçimindedir. Tüm bu değerler bir for döngüsüyle görüntülenir.
    1. satır: insert, update, delete komutlarının yürütülmesinin sonucu, komut tarafından değiştirilen satır sayısıdır.