Cómo obtener datos en WordPress usando MySQLi o $wpdb
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:
- ¿Cómo mostrar todos los datos de la tabla?
- ¿Cómo reemplazar datos si se cumple una condición? Por ejemplo, quiero cambiar el
time
dondeuser_ip = 245.356.134.22
Por favor, háganme saber si hay algo que deba aprender.
Gracias

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
}

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

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?

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

// 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' )
);

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.

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

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 tienes razón, amigo! El autoaprendizaje es imprescindible... Ahora me doy cuenta de que no debería haber dado la respuesta completa.

¡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.

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/
