Couchbase e PHP – Parte II

Una volta connessi al database è possibile formulare le richieste costruendo una stringa con una query N1QL; per iniziare a capire come vengono espressi i risultati in JSON, iniziamo con una richiesta semplice: il numero totale di document (record) presenti nel database:

<?php
  $n1ql = $cluster->query("SELECT COUNT(*) AS countAll
                           FROM AnimeDataBase;");
?>

Nel caso di un normale database SQL, la query fornirebbe direttamente il risultato; in questo caso, Couchbase restituisce un oggetto JSON più articolato; se aggiungiamo un var_dump($n1ql); al file php, otteniamo il seguente risultato (che io ho allineato per maggior chiarezza):

object(Couchbase\QueryResultImpl)#3 (3) {
 ["status":"Couchbase\QueryResultImpl":private]=> int(0)
 
 ["meta":"Couchbase\QueryResultImpl":private]=> object(Couchbase\QueryMetaDataImpl)#4 (7) {
  ["status":"Couchbase\QueryMetaDataImpl":private]=> string(7) "success"
  ["request_id":"Couchbase\QueryMetaDataImpl":private]=> string(36) "5959ac68-81b1-4590-b00c-b7475eac5e25"
  ["client_context_id":"Couchbase\QueryMetaDataImpl":private]=> string(16) "92ecd5afc4c1eb04"
  ["signature":"Couchbase\QueryMetaDataImpl":private]=> array(1) {
   ["countAll"]=> string(6) "number" 
  } 
  ["errors":"Couchbase\QueryMetaDataImpl":private]=> NULL 
  ["warnings":"Couchbase\QueryMetaDataImpl":private]=> NULL 
  ["metrics":"Couchbase\QueryMetaDataImpl":private]=> array(5) {
   ["elapsedTime"]=> string(10) "3.975454ms" 
   ["executionTime"]=> string(10) "3.951699ms" 
   ["resultCount"]=> int(1) 
   ["resultSize"]=> int(18) 
   ["serviceLoad"]=> int(12) 
  }
 }
 
 ["rows":"Couchbase\QueryResultImpl":private]=> array(1) {
  [0]=> array(1) { ["countAll"]=> int(32755) } 
 } 
}

Di fatto si tratta di un array di 3 elementi così composto:

  • [“status”] – un intero che indica lo stato restituito da Couchbase (0 in questo caso);
  • [“meta”] – un array con una serie di informazioni legate alla query eseguita: tempo di calcolo, numero di record restituiti, ecc;
  • [“rows”] – un array che contiene il risultato della query.

Quello che interessa a noi, quindi, è solamente l’array [“rows”] che possiamo assegnare ad una nuova variabile:

<?php
  $n1ql = $cluster->query("SELECT COUNT(*) AS countAll
                           FROM AnimeDataBase;");
  $recordCount = $n1ql->rows();
  echo '<p>';
  var_dump($recordCount);
  echo '</p>';
?>

Se proviamo a visualizzare questa pagina php otterremo un solo array:

array(1) {
 [0]=> array(1) { ["countAll"]=> int(32755) } 
}

Quindi per stampare il risultato basterà dare un semplice echo $recordCount[0][“countAll”]; in sostanza, il nostro file php completo si presenterà così:

<?php
  // ***** COLLEGAMENTO AL DATABASE
  $connectionString = "couchbase://localhost";
  $options = new \Couchbase\ClusterOptions();
  $options->credentials("username","password");
  $cluster = new Couchbase\Cluster($connectionString, $options);
?>

<!DOCTYPE html>
<head>
  <link href="https://fonts.googleapis.com/css?family=Didact Gothic" rel="stylesheet">
  <link rel="stylesheet" type="text/css" href="cbstyle.css">
</head>

<body>

  <h1 class="anime-db">Statistiche Anime Offline Database</h1>

  <!-- ***** NUMERO TOTALE DI RECORD -->
  <?php
    $n1ql = $cluster->query("SELECT COUNT(*) AS countAll
                             FROM AnimeDataBase;");
    $recordCount = $n1ql->rows();
  ?>
  <p class="anime-db">Numero di record nel database: <b>
  <?php echo $recordCount[0]["countAll"]; ?> </b></p>

</body>

E questo sarà il risultato mostrato nel browser:

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *