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: