Acceso a datos de Tablas, (query_first,query_read,query_write)

imported_Jhonnyf Seguir

Épsilon
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
6 Sep 2008
Mensajes
959
Cuando estemos haciendo un archivo PHP o un Plugin, que es netamente codigo PHP, vBulletin nos ofrece 3 funciones para accesar a los datos, estos son:
PHP:
$vbulletin->db->query_first("SELECT");
$vbulletin->db->query_read("SELECT");
$vbulletin->db->query_read_slave("SELECT");
$vbulletin->db->query_write("INSERT o UPDATE");
Diferencias:

query_first nos devuelve el primer resultado de la consulta en forma de un arreglo, es util si usas consultas que devuelven 1 sola fila como por ejemplo un conteo de registro o algun registro en especial
Ejemplo:
PHP:
$usuario = $vbulletin->db->query_first("SELECT *
                    FROM " . TABLE_PREFIX . "user
                    WHERE userid=1");
echo $usuario['userid'];
echo $usuario['username'];
echo $usuario['email'];
//Etc de los demas campos
***********************************************

query_read
y query_read_slave nos devuelve una coleccion de registros al que debemos recorrer para obtener cada registro
Ejemplo:
PHP:
$usuario = $vbulletin->db->query_read("SELECT * FROM " . TABLE_PREFIX . "user"); //todos los registros
if ($vbulletin->db->num_rows($usuario) > 0) //si hay 1 o más registros
{
    $tabla = '<table border="0">';
    $tabla .= '<tr><td class="tcat">Userid</td><td class="tcat">Nombre</td><td class="tcat">Correo</td></tr>';
    while ($reg_usuario = $vbulletin->db->fetch_array($usuario)) //lleno $reg_usuario por cada usuario en los registros devueltos
    {
        $tabla .= '<tr><td class="alt1">'.$reg_usuario['userid'].'</td><td class="alt2">'.$reg_usuario['username'].'</td><td class="alt1">'.$reg_usuario['email'].'</td></tr>';
    }
    $tabla .= '</table>';
}
echo $tabla; //muestra todo una tabla con todos los usuarios del foro
Nota: query_read_slave usa una conexion esclava para las consultas, no la principal
***********************************************

query_write no hay mucho que decir de esta funcion... basicamente se usa para hacer INSERTS o UPDATE de campos en tablas
PHP:
$vbulletin->db->query_write("UPDATE " . TABLE_PREFIX . "user SET
                username = 'Nuevo Nick'
                WHERE userid=1
                ");
//Actualizar un registro en la Base de datos
PD: TABLE_PREFIX es una costante definida en vBulletin que contiene el prefijo que has configurado para tu foro, es recomendable usarlo siempre ya que los nombres de tablas pueden varias de foro en foro (websites)


***********************************************

Usuarios Avanzados: Hasta la version 3.8.4 (con la que se hizo este tutorial) las funciones (includes/class_core.php):

  • query_write
  • query_read
  • query_read_slave
  • query

usan exactamente el mismo codigo, vBulletin mencionó que en un futuro (esperemos que en vB 4.0) si hagan la diferencia, asi que hay que ir acostumbrandonos nomás
 

Carrega

Zeta
Verificación en dos pasos activada
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
13 Ago 2008
Mensajes
1.881
tu si que sabes complacerme :$

como siempre geniales tus tutos :D
 

halcon00

Beta
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
30 Ene 2010
Mensajes
71
Enlace eliminado, En primer lugar gracias por compartir tus conocimientos con los novatos como yo.

Utilizando tu codigo queria sacar una lista de los usuarios VIP y su fecha de VIP guardada en un campo de perfil (field15)

Mi problema es que no se como unir la informacion para que la presente , vamos que no se como anidar los dos while. Si puedes hecharme una mano.

Esto es lo que tengo del codigo, veras que el segundo while lo tengo comentado.

PHP:
<?
require_once('./global.php');

// Presenta Usuarios 
$usuario = $vbulletin->db->query_read("SELECT * FROM " . TABLE_PREFIX . "user WHERE usergroupid = 8"); //todos los registros   usergroupid = 8 VIP  (9 = VIP+)
$fechaVip = $vbulletin->db->query_read("SELECT * FROM " . TABLE_PREFIX . "userfield"); //todos los registros de campos perfil personales
if ($vbulletin->db->num_rows($usuario) > 0) //si hay 1 o más registros
{
   $tabla = '<table border="1">';
   $tabla .= '<tr><td class="tcat">Userid</td><td class="tcat">Nombre</td><td class="tcat">Correo</td><td class="tcat">Fecha VIP</td></tr>';
 
   while ($reg_usuario = $vbulletin->db->fetch_array($usuario))//lleno $reg_usuario por cada usuario en los registros devueltos
   
   //while($reg_fechaVip = $vbulletin->db->fetch_array($fechaVip)) //lleno $reg_fechaVip por cada usuario en los registros devueltos
    {
 
         $tabla .= '<tr><td class="alt1">'.$reg_usuario['userid'].'</td><td class="alt2">'.$reg_usuario['username'].'</td><td class="alt1">'.$reg_usuario['email'].'</td><td class="alt2">'.$reg_fechaVIP['field15'].'</td></tr>';
 
 }
    $tabla .= '</table>';
}
echo $tabla; //muestra todo una tabla con todos los usuarios del foro

De antemano muchas gracias.
 
Arriba