Come recuperare i dati in WordPress usando MySQLi o $wpdb
Ho una tabella personalizzata come questa:
useraw
1. id (Primary*)
2. user_ip
3. post_id
4. time
Sto inserendo i dati nella tabella usando
$wpdb->insert($table_name , array('user_ip' => $user_ip, 'post_id' =>
$postID, 'time' => $visittime),array('%s','%d', '%d') );
Ci sono quattro righe che ho inserito usando questo codice:
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
Voglio imparare come utilizzare le query MySQL in WordPress. Quindi ecco le mie domande:
- Come visualizzare tutti i dati della tabella?
- Come sostituire i dati se la condizione corrisponde. Ad esempio, voglio cambiare il valore di
time
doveuser_ip = 245.356.134.22
Per favore, fatemi sapere se c'è qualcosa che devo imparare.
Grazie
Per recuperare i dati da una tabella del database
$results = $wpdb->get_results( "SELECT * FROM $table_name"); // Query per recuperare i dati dalla tabella del database e memorizzarli in $results
if(!empty($results)) // Verifica se $results contiene valori o meno
{
echo "<table width='100%' border='0'>"; // Aggiunge i tag <table> e <tbody> fuori dal ciclo foreach per evitare che vengano creati ripetutamente
echo "<tbody>";
foreach($results as $row){
$userip = $row->user_ip; // Memorizza il valore del campo user_ip in una variabile per usarlo successivamente in una query di aggiornamento
echo "<tr>"; // Aggiunge righe della tabella all'interno del ciclo foreach
echo "<th>ID</th>" . "<td>" . $row->id . "</td>";
echo "</tr>";
echo "<td colspan='2'><hr size='1'></td>";
echo "<tr>";
echo "<th>IP Utente</th>" . "<td>" . $row->user_ip . "</td>"; // Recupera i dati dal campo user_ip
echo "</tr>";
echo "<td colspan='2'><hr size='1'></td>";
echo "<tr>";
echo "<th>ID Post</th>" . "<td>" . $row->post_id . "</td>";
echo "</tr>";
echo "<td colspan='2'><hr size='1'></td>";
echo "<tr>";
echo "<th>Ora</th>" . "<td>" . $row->time . "</td>";
echo "</tr>";
echo "<td colspan='2'><hr size='1'></td>";
}
echo "</tbody>";
echo "</table>";
}
NOTA: Modifica il formato di recupero dei dati in base alle tue esigenze (struttura della tabella)
Per aggiornare il campo time in base a una condizione
if($userip==245.356.134.22){ // Verifica se il campo user_ip ha il seguente valore
$wpdb->update(
$table_name,
array(
'time' => 'IL TUO NUOVO ORARIO' // Inserisce il nuovo valore per il campo time
),
array('%d') // Specifica il tipo di dato del campo time
);
}
Aggiornamento
Se vuoi verificare se l'IP che stai per inserire nel database esiste già o meno, puoi farlo in questo modo
global $wpdb,$ip;
$results = $wpdb->get_results( "SELECT user_ip FROM $table_name"); // Query per recuperare i record solo dal campo user_ip
$new_ip = 245.356.134.22; // Memorizza il nuovo indirizzo IP in una variabile
if(!empty($results))
{
foreach($results as $row){
$old_ip = $row->user_ip; // Memorizza il valore del campo user_ip in una variabile
if($new_ip==$old_ip){ // Confronta il nuovo indirizzo IP con quelli vecchi
$ip = 'Esiste già'; // Se l'IP esiste già nel database, assegna una stringa alla variabile
}
}
}
if($ip = 'Esiste già'){ // Verifica se la variabile contiene una stringa (contiene una stringa solo se l'IP esiste già nel database, come verificato nella condizione if confrontando i vecchi IP con il nuovo)
// Query di inserimento nel caso in cui l'IP esista già nel database
}else{
// Query di inserimento nel caso in cui l'IP non esista nel database
}

Fantastico... puoi dirmi come posso verificare se l'indirizzo ip
è già nel database o no? Se l'indirizzo IP è già nel database allora esegui il programma 1 e se non c'è, esegui il programma 2. So che dobbiamo usare WHERE
nella query ma non so come usarlo

Ho provato questo e funziona. Ma al momento sta recuperando tutti i dati dal database usando foreach
, poi sta compilando il nostro codice per verificare se l'ip è lo stesso o no. C'è un altro modo per far controllare direttamente quell'ip usando una query al database?

Rishabh, grazie per avermi aiutato... Solo un'ultima domanda. Posso usare una query come SELECT user_ip FROM $table_name WHERE
user_ip= $username
. Funzionerà? Grazie per la tua risposta e per l'aiuto Rishabh.

//Per recuperare i dati usa
global $wpdb;
$results = $wpdb->get_results("SLECT * FROM table_name");
//e per aggiornare usa il codice qui sotto
$wpdb->update(
$table_name,
array(
'time' => time(), // stringa
),
array( 'user_ip' => '245.356.134.22' ),
array('%s'),
array( '%d' )
);

Hai indicato MYSQLi nella tua domanda, ma hai etichettato e fatto riferimento a MySQL. Se stai usando MySQL, quanto segue funzionerà per te:
Questo è abbastanza semplice e, considerando che hai già costruito l'istruzione INSERT, puoi semplicemente usare UPDATE in questo modo:
$wpdb->update($table_name , array('user_ip' => $user_ip, 'post_id' =>$postID, 'time' => $visittime),array('%s','%d', '%d') );
Quindi tutto ciò che dovresti fare è impostare i valori nella tua query in base ai dati che vuoi modificare nel database. Puoi trovare esempi qui
Per quanto riguarda il recupero di tutti i dati, potresti usare quanto segue:
$results = $wpdb->get_results("SELECT * FROM table_name");
Puoi aggiungere qualsiasi parametro WHERE oppure ordinarlo come una normale istruzione SQL. Puoi poi iterare i risultati con un ciclo foreach e visualizzare i dati recuperati.

Grazie per la risposta @hosker. Ma volevo sapere come recuperare quel $results

Sono disposto ad aiutare, a differenza di @rishabh, che è stato così gentile da darti una risposta completa con il codice, io ti stavo solo dando le basi su come fare quello che chiedevi. Una semplice ricerca su Google e una consultazione del Wordpress Codex avrebbero potuto risolvere il tuo problema. Questi forum sono una risorsa, e io li uso, ma non mi aspetterei mai che qualcuno scriva il codice al posto mio. Avevi già impostato metà del lavoro, ma eri troppo pigro per capirlo e scrivere il codice da solo. Non si impara se qualcuno fa tutto al posto tuo.

@hosker hai ragione amico! Lo studio autonomo è fondamentale... Ora mi rendo conto che non avrei dovuto dare la risposta completa.

Mmm! avete ragione ragazzi. Quello che ho chiesto qui è per mia referenza. Quello che sto cercando di fare è qualcosa di diverso. Voglio sapere alcune cose per usarle con il mio plugin. Quello che voglio sapere è come usare queste query per mostrare l'IP che desidero senza recuperare tutti i dati dal database. Voglio una query che controlli l'IP che voglio e poi lo visualizzi. E se avessi 30000 IP? Recupererebbe tutti i 30000 IP usando foreach
. Non è corretto! Ecco perché ho bisogno del vostro aiuto.

solo per farti sapere che il tuo link per "esempi qui" non è più disponibile e stanno cambiando in https://developer.wordpress.org/reference/classes/wpdb/
