Cómo obtener datos en WordPress usando MySQLi o $wpdb

25 jul 2016, 02:56:14
Vistas: 97.3K
Votos: 11

Tengo una tabla personalizada como esta:

useraw

1. id (Primary*)
2. user_ip
3. post_id
4. time

Estoy insertando datos en la tabla usando

$wpdb->insert($table_name , array('user_ip' => $user_ip, 'post_id' =>
$postID, 'time' => $visittime),array('%s','%d', '%d') );

Hay cuatro filas que inserté usando este código:

id                  :        245
user_ip             :        245.346.234.22
post_id             :        24434
time                :        255464

id                  :        345
user_ip             :        245.346.234.22
post_id             :        23456
time                :        23467

id                  :        567
user_ip             :        245.346.234.22
post_id             :        57436
time                :        5678

id                  :        234
user_ip             :        245.356.134.22
post_id             :        2356
time                :        45678

Quiero aprender cómo usar consultas MySQL en WordPress. Así que aquí están mis preguntas:

  1. ¿Cómo mostrar todos los datos de la tabla?
  2. ¿Cómo reemplazar datos si se cumple una condición? Por ejemplo, quiero cambiar el time donde user_ip = 245.356.134.22

Por favor, háganme saber si hay algo que deba aprender.

Gracias

0
Todas las respuestas a la pregunta 3
6
11

Para obtener datos de una tabla de la base de datos

$results = $wpdb->get_results( "SELECT * FROM $table_name"); // Consulta para obtener datos de la tabla y almacenarlos en $results
if(!empty($results))                        // Verificando si $results tiene valores o no
{    
    echo "<table width='100%' border='0'>"; // Añadiendo <table> y <tbody> fuera del foreach para que no se creen repetidamente
    echo "<tbody>";      
    foreach($results as $row){   
    $userip = $row->user_ip;               // Almacenando el valor de user_ip en variable para usarlo luego en consulta de actualización
    echo "<tr>";                           // Añadiendo filas de la tabla dentro del foreach
    echo "<th>ID</th>" . "<td>" . $row->id . "</td>";
    echo "</tr>";
    echo "<td colspan='2'><hr size='1'></td>";
    echo "<tr>";        
    echo "<th>IP del Usuario</th>" . "<td>" . $row->user_ip . "</td>";   // Obteniendo datos del campo user_ip
    echo "</tr>";
    echo "<td colspan='2'><hr size='1'></td>";
    echo "<tr>";        
    echo "<th>ID del Post</th>" . "<td>" . $row->post_id . "</td>";
    echo "</tr>";
    echo "<td colspan='2'><hr size='1'></td>";
    echo "<tr>";        
    echo "<th>Tiempo</th>" . "<td>" . $row->time . "</td>";
    echo "</tr>";
    echo "<td colspan='2'><hr size='1'></td>";
    }
    echo "</tbody>";
    echo "</table>"; 

}

NOTA: Cambia el formato de obtención de datos según tus necesidades (estructura de tabla)

Para actualizar el campo time bajo una condición

 if($userip==245.356.134.22){  // Verificando si el campo user_ip tiene el siguiente valor
$wpdb->update( 
$table_name, 
array( 
    'time' => 'TU NUEVO TIEMPO' // Introduciendo el nuevo valor para el campo time
),      
array('%d')                   // Especificando el tipo de dato del campo time
);
}

Actualización

Si deseas verificar si la IP que vas a insertar en la base de datos ya existe o no, hazlo así:

global $wpdb,$ip;
$results = $wpdb->get_results( "SELECT user_ip FROM $table_name");  // Consulta para obtener registros solo del campo user_ip

$new_ip = 245.356.134.22;   // Almacenando nueva dirección IP en variable

if(!empty($results))                       
{    
    foreach($results as $row){  
    $old_ip = $row->user_ip;        // Almacenando el valor del campo user_ip en variable
    if($new_ip==$old_ip){           // Comparando nueva IP con IPs antiguas
      $ip = 'Ya Existe';            // Si la IP ya existe en la base de datos, asignamos un string a la variable
    }
    }

}
if($ip = 'Ya Existe'){          // Verificando si la variable tiene algún string (Tendrá un string solo cuando la IP ya exista en la BD como se verificó en la condición if comparando IPs antiguas con la nueva)
// Consulta de inserción según IP ya existente en la base de datos
}else{
// Consulta de inserción según IP no existente en la base de datos
}
25 jul 2016 10:24:05
Comentarios

Eso es genial... ¿puedes decirme cómo puedo verificar si la dirección ip ya está en la base de datos o no? Si la dirección IP ya está en la base de datos, entonces ejecutar el programa 1 y si no está, ejecutar el programa 2. Sé que necesitamos usar WHERE en la consulta pero no sé cómo usarlo

Ramesh Pardhi Ramesh Pardhi
25 jul 2016 11:16:51

¿Has visto la respuesta actualizada?

Rishabh Rishabh
26 jul 2016 08:32:41

Probé esto y está funcionando. Pero ahora mismo está obteniendo todos los datos de la base de datos usando foreach, luego está compilando nuestro código para verificar si la IP es la misma o no. ¿Hay alguna otra forma de verificar directamente esa IP usando una consulta a la base de datos?

Ramesh Pardhi Ramesh Pardhi
26 jul 2016 15:04:36

¡La respuesta ha sido actualizada! Comprueba si es lo que necesitas.

Rishabh Rishabh
27 jul 2016 08:18:17

Rishabh, gracias por ayudarme... Solo una última pregunta. ¿Puedo usar una consulta como SELECT user_ip FROM $table_name WHEREuser_ip= $username? ¿Funcionará? Gracias por tu respuesta y ayuda, Rishabh.

Ramesh Pardhi Ramesh Pardhi
27 jul 2016 09:34:50

Sí, puedes usarla así $results = $wpdb->get_results( "SELECT user_ip FROM $table_name WHERE user_ip = '$username' ");

Rishabh Rishabh
27 jul 2016 11:57:01
Mostrar los 1 comentarios restantes
2
// Para obtener datos usar
global $wpdb;
$results = $wpdb->get_results("SELECT * FROM table_name");
// y para actualizar usar el siguiente código
$wpdb->update(
  $table_name,
  array(
    'time' => time(),   // cadena
  ),
  array( 'user_ip' => '245.356.134.22' ),
  array('%s'),
  array( '%d' )
);
27 jul 2016 08:29:20
Comentarios

Por favor, agrega algunos comentarios delante de tus líneas de código para que el espectador pueda entender qué hace tu código y cómo.

Rishabh Rishabh
27 jul 2016 09:01:03

@Rishabh no es necesario más comentarios ya que he insertado comentarios apropiados antes del código.

Ganesh Ganesh
27 jul 2016 09:36:49
5

Mencionas MYSQLi en tu pregunta, pero etiquetas y te refieres a MySQL. Si estás usando MySQL, lo siguiente te funcionará:

Es bastante simple, y dado que ya tienes construida la sentencia de inserción, puedes usar update de la siguiente manera:

$wpdb->update($table_name , array('user_ip' => $user_ip, 'post_id' =>$postID, 'time' => $visittime),array('%s','%d', '%d') );

Lo único que tendrías que hacer es establecer los valores en tu consulta para indicar qué datos en la base de datos deseas cambiar. Puedes encontrar ejemplos aquí

En cuanto a recuperar todos los datos, podrías usar lo siguiente:

$results = $wpdb->get_results("SELECT * FROM table_name"); 

Puedes añadir cualquier parámetro WHERE u ordenarlo como cualquier sentencia SQL estándar. Luego puedes recorrer los resultados con un bucle foreach y simplemente mostrar los datos que has recuperado.

25 jul 2016 03:43:01
Comentarios

Gracias por responder @hosker. Pero lo que quería saber es cómo obtener ese $results

Ramesh Pardhi Ramesh Pardhi
25 jul 2016 11:18:43

Estoy dispuesto a ayudar, a diferencia de @rishabh, que tuvo la amabilidad de darte una respuesta completa con código, yo solo te estaba dando lo básico sobre cómo hacer lo que pedías. Una simple búsqueda en Google y un vistazo al Codex de Wordpress podrían haber resuelto tu problema. Estos foros están aquí como recurso, y yo los uso, pero nunca esperaría que alguien codificara por mí. Ya tenías la mitad configurada, pero fuiste demasiado perezoso para averiguarlo y escribir el código tú mismo. Nunca aprendes si alguien lo hace todo por ti.

hosker hosker
26 jul 2016 02:16:29

@hosker tienes razón, amigo! El autoaprendizaje es imprescindible... Ahora me doy cuenta de que no debería haber dado la respuesta completa.

Rishabh Rishabh
26 jul 2016 08:36:54

¡Hmm! Tienen razón, chicos. Lo que pregunté aquí es para mi referencia. Lo que estoy tratando de hacer es algo diferente. Quiero saber algunas cosas para usarlas con mi plugin. Lo que quiero saber es cómo usar estas consultas para mostrar la IP que deseo sin recuperar todos los datos de la base de datos. Quiero una consulta que busque la IP que necesito y luego la muestre. ¿Qué pasa si tengo 30000 IPs? Recuperaría todas las 30000 IPs usando foreach. ¡Eso no es correcto! Por eso necesito su ayuda.

Ramesh Pardhi Ramesh Pardhi
26 jul 2016 15:13:04

solo para que sepan que su enlace de "ejemplos aquí" ya no está disponible y ha cambiado a https://developer.wordpress.org/reference/classes/wpdb/

Steven Smith Steven Smith
13 may 2021 16:52:17