Query in phpBB3

Area dedicata alle Guide
Regole del forum
Immagine
Rispondi
Avatar utente
Galandas
Staff phpBB3World
Staff phpBB3World
Messaggi: 792
Iscritto il: 4 nov 2012, 9:18
Località: phpbb3world
Contatta:

Query in phpBB3

Messaggio da Galandas » 17 gen 2013, 3:38

Query in phpBB3

phpBB supporta molti database diversi, per fare questo è necessario utilizzare le istruzioni SQL che lavorano con ciascuno e che l'oggetto $db nel livello di estrazione del database di phpBB è in grado di capire.

Select Query
Cominciamo con uno semplice, la query di selezione seleziona un insieme di dati specificati da una tabella.
esempio:

Codice: Seleziona tutto

//Array con i dati da inserire
$sql_array = array(
    'username'    => 'admin',
    'email'        => 'admin@example.com',
);

// Creare l'istruzione SQL
$sql = 'SELECT user_id 
        FROM ' . USERS_TABLE . ' 
        WHERE ' . $db->sql_build_array('SELECT', $sql_array);

// Eseguire la query 
$result = $db->sql_query($sql);

// $row deve contenere i dati selezionati
$row = $db->sql_fetchrow($result);

// Accertarsi di liberare il risultato dopo una query di selezione                    
$db->sql_freeresult($result);

// Mostra abbiamo ottenuto il risultato che cercavamo
echo $row['user_id']; 
È inoltre possibile utilizzare un carattere jolly (*) per la query SELECT per selezionare tutti i campi:

Esempio:

Codice: Seleziona tutto

$sql = 'SELECT * 
        FROM ' . USERS_TABLE . ' 
        WHERE ' . $db->sql_build_array('SELECT', $sql_array); 
Si avrà quindi tutti i campi disponibile sotto la $row[] array con la chiave è il nome della colonna.

Select Count
Se hai lavorato con PHP e MySQL in precedenza, sarete molto tentati di usare il php:mysql_num_rows. Tuttavia, questo non deve essere usato in phpBB. Per ottenere il numero di righe in un risultato, è necessario utilizzare la query SELECT COUNT. L'esempio seguente mostra come è possibile contare il numero di record nella tabella utenti.

Esempio:

Codice: Seleziona tutto

$sql = 'SELECT COUNT(user_id) AS user_count
        FROM ' . USERS_TABLE;

$result = $db->sql_query($sql);

// Il numero di utenti è ora disponibile qui:
$user_count = (int) $db->sql_fetchfield('user_count');

$db->sql_freeresult($result);
Si può anche aggiungere un WHERE per restringere i nostri risultati, in quanto tale, si può contare il numero di fondatori con questa query:

Esempio:

Codice: Seleziona tutto

$sql = 'SELECT COUNT(user_id) AS founder_count
        FROM ' . USERS_TABLE . '
        WHERE user_type = ' . USER_FOUNDER;

$result = $db->sql_query($sql);

// Il numero dei fondatori è ora disponibile qui:
$founder_count= (int) $db->sql_fetchfield('founder_count');

$db->sql_freeresult($result);

Select Join
Questo è un tipo di query SELECT che consente di selezionare i dati da più tabelle in una query. Questo è uno strumento estremamente potente per essere in grado di utilizzare. Ecco un esempio di uno che non utilizza dbal.sql_build_array, per semplicità.

Esempio:

Codice: Seleziona tutto

$user_id = 2;

// Abbiamo un prefisso ciascuna depositato con la lettera che rappresenta la tabella che proviene
// Nella riga successiva, dichiariamo la tabella user's che ha il prefisso 'u' e la tabella groups è 'g'
$sql = 'SELECT u.user_id, u.group_id, u.username, g.group_id, g.group_name 
        FROM ' . USERS_TABLE . ' u, ' . GROUPS_TABLE . " g, 
        WHERE u.user_id = $user_id 
        AND u.group_id = g.group_id";

$result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result);

// Ora è possibile associare il nome dell'utente gruppo predefinito con l'ID utente.
echo $row['user_id'];
echo $row['group_name'];
Ora che sappiamo come lavorare queste query, consente di farlo in stile phpBB. Questo fa la stessa cosa esattamente il codice di cui sopra, tuttavia questo utilizza phpBB di dbal.sql_build_array. Questa è una buona opzione per le query che diventano molto complicate, come si può chiaramente tracciare allo spettatore del codice di quello che è che sta facendo.

Esempio:

Codice: Seleziona tutto

$sql_arr = array(
    'SELECT'    => 'u.user_id, u.group_id, u.username, g.group_id, g.group_name',
    'FROM'        => array(
        USERS_TABLE        => 'u',
        GROUPS_TABLE    => 'g'
        ),
    'WHERE'        => 'u.user_id = ' . $user_id . ' AND u.group_id = g.group_id',
    );

$sql = $db->sql_build_query('SELECT', $sql_arr);

$result = $db->sql_query($sql);
$row = $db->sql_fetchrow($result);

echo $row['user_id'];
echo $row['group_name']; 

Insert
Gli Insert (Inserisci) sono relativamente semplici, nulla di reale è difficile qui. Diritto del pipistrello, ecco il modo per farlo in phpBB. Se avete mai lavorato con le tradizionali istruzioni SQL INSERT, si trova il dbal.sql_build_arrayè un modo molto più semplice per eseguire queste affermazioni.

Esempio:

Codice: Seleziona tutto

$sql_arr = array(
    'rank_title'    => 'Bertie',
    'rank_min'        => 0,
    'rank_special'    => 1,
    'rank_image'     => 'bertie.gif',
);

$sql = 'INSERT INTO ' . RANKS_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_arr);
$db->sql_query($sql);

Update
Update (Aggiornamento) funziona in modo simile a Insert (Inserisci) in phpBB, ad eccezione è necessario specificare il record da aggiornare al posto di crearne uno nuovo. Come nel caso di normale SQL, è sufficiente specificare i record che si sta aggiornando

Esempio:

Codice: Seleziona tutto

$sql_arr = array(
    'user_email'    => 'admin@example.com',
);

$sql = 'UPDATE ' . USERS_TABLE . ' SET ' . $db->sql_build_array('UPDATE', $sql_arr);
$db->sql_query($sql);

Delete
Quando si eliminano i record, si usa in genere la funzione dbal.sql_in_set per costruire l'elemento WHERE della query.

Esempio:

Codice: Seleziona tutto

$sql_in = array(82,129,142);
$sql = 'DELETE FROM ' . USERS_TABLE . ' 
        WHERE ' . $db->sql_in_set('user_id', $sql_in);
$db->sql_query($sql);
Menu Forum ha scritto:

Rispondi

Torna a “[3.0.x] Guide”

Chi c’è in linea

Visitano il forum: Nessuno e 9 ospiti