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'];
Esempio:
Codice: Seleziona tutto
$sql = 'SELECT *
FROM ' . USERS_TABLE . '
WHERE ' . $db->sql_build_array('SELECT', $sql_array);
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);
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'];
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);