Cum să prelucrezi date în WordPress folosind MySQLi sau $wpdb
Am o tabelă personalizată care arată astfel:
useraw
1. id (Primary*)
2. user_ip
3. post_id
4. time
Introduc date în tabelă folosind:
$wpdb->insert($table_name , array('user_ip' => $user_ip, 'post_id' =>
$postID, 'time' => $visittime),array('%s','%d', '%d') );
Am introdus patru rânduri folosind acest cod:
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
Vreau să învăț cum să folosesc interogări MySQL în WordPress. Iată întrebările mele:
- Cum să afișez toate datele din tabel?
- Cum să înlocuiesc datele dacă o condiție este îndeplinită. De exemplu, vreau să modific
time
undeuser_ip = 245.356.134.22
Te rog să-mi spui dacă sunt alte lucruri pe care ar trebui să le învăț.
Mulțumesc

Pentru a prelua date din tabelul bazei de date
$results = $wpdb->get_results( "SELECT * FROM $table_name"); // Interogare pentru a prelua date din tabelul bazei de date și stocarea în $results
if(!empty($results)) // Verifică dacă $results conține valori sau nu
{
echo "<table width='100%' border='0'>"; // Adăugarea tag-urilor <table> și <tbody> în afara buclei foreach pentru a nu fi create repetat
echo "<tbody>";
foreach($results as $row){
$userip = $row->user_ip; //stocarea valorii câmpului user_ip într-o variabilă pentru a o folosi ulterior în interogarea de actualizare
echo "<tr>"; // Adăugarea rândurilor tabelului în interiorul buclei foreach
echo "<th>ID</th>" . "<td>" . $row->id . "</td>";
echo "</tr>";
echo "<td colspan='2'><hr size='1'></td>";
echo "<tr>";
echo "<th>IP Utilizator</th>" . "<td>" . $row->user_ip . "</td>"; //preluarea datelor din câmpul user_ip
echo "</tr>";
echo "<td colspan='2'><hr size='1'></td>";
echo "<tr>";
echo "<th>ID Postare</th>" . "<td>" . $row->post_id . "</td>";
echo "</tr>";
echo "<td colspan='2'><hr size='1'></td>";
echo "<tr>";
echo "<th>Timp</th>" . "<td>" . $row->time . "</td>";
echo "</tr>";
echo "<td colspan='2'><hr size='1'></td>";
}
echo "</tbody>";
echo "</table>";
}
NOTĂ: Modificați formatul de preluare a datelor în funcție de nevoile dvs. (structura tabelului)
Pentru a actualiza câmpul time în funcție de o condiție
if($userip==245.356.134.22){ //Verifică dacă câmpul user_ip are următoarea valoare
$wpdb->update(
$table_name,
array(
'time' => 'NOUL TĂU TIMP' // Introducerea noii valori pentru câmpul time
),
array('%d') // Specificarea tipului de date al câmpului time
);
}
Actualizare
Dacă doriți să verificați dacă IP-ul pe care îl veți insera în baza de date există deja sau nu, faceți astfel:
global $wpdb,$ip;
$results = $wpdb->get_results( "SELECT user_ip FROM $table_name"); //interogare pentru a prelua înregistrări doar din câmpul user_ip
$new_ip = 245.356.134.22; //Stocarea noii adrese IP într-o variabilă
if(!empty($results))
{
foreach($results as $row){
$old_ip = $row->user_ip; // stocarea valorii câmpului user_ip într-o variabilă
if($new_ip==$old_ip){ // compararea noii adrese IP cu cele vechi
$ip = 'Există deja'; // dacă IP-ul există deja în baza de date, se atribuie un șir de caractere variabilei
}
}
}
if($ip = 'Există deja'){ // Verifică dacă variabila are un șir de caractere (Are un șir de caractere doar dacă IP-ul există deja în baza de date, așa cum a fost verificat în condiția if prin compararea IP-urilor vechi cu cel nou)
//Interogare de inserare în funcție de IP-ul care există deja în baza de date
}else{
//Interogare de inserare în funcție de IP-ul care nu există în baza de date
}

Este minunat... poți să-mi spui cum pot verifica dacă adresa ip
este deja în baza de date sau nu? Dacă adresa IP este deja în baza de date, atunci rulează programul 1, iar dacă nu, rulează programul 2. Știu că trebuie să folosim WHERE
în interogare, dar nu știu cum să-l folosesc.

Am încercat asta și funcționează. Însă acum preia toate datele din baza de date folosind foreach
, apoi compilează codul nostru pentru a verifica dacă IP-ul este același sau nu. Există vreo altă metodă prin care să verificăm direct acel IP folosind o interogare la baza de date?

Rishabh, îți mulțumesc pentru ajutor... Doar o ultimă întrebare. Pot folosi interogarea precum SELECT user_ip FROM $table_name WHERE
user_ip= $username
. Va funcționa? Îți mulțumesc pentru răspuns și ajutor, Rishabh.

//Pentru preluarea datelor folosește
global $wpdb;
$results = $wpdb->get_results("SELECT * FROM table_name");
//iar pentru actualizare folosește codul de mai jos
$wpdb->update(
$table_name,
array(
'time' => time(), // șir de caractere (string)
),
array( 'user_ip' => '245.356.134.22' ),
array('%s'),
array( '%d' )
);

Te rog să adaugi niște comentarii înaintea liniilor de cod, astfel încât cititorul să poată înțelege ce face codul tău și cum funcționează.

În întrebarea dumneavoastră menționați MYSQLi, dar etichetați și faceți referire la MySQL. Dacă utilizați MySQL, următoarele vă vor funcționa:
Acest lucru este destul de simplu, iar având în vedere faptul că deja aveți instrucțiunea de inserare construită, puteți folosi pur și simplu update astfel:
$wpdb->update($table_name , array('user_ip' => $user_ip, 'post_id' =>$postID, 'time' => $visittime),array('%s','%d', '%d') );
Apoi, tot ce trebuie să faceți este să setați valorile în interogarea dumneavoastră conform datelor pe care doriți să le modificați în baza de date. Puteți găsi exemple aici
În ceea ce privește preluarea tuturor datelor, puteți utiliza următoarele:
$results = $wpdb->get_results("SELECT * FROM table_name");
Puteți adăuga orice parametri WHERE sau să sortați exact ca într-o instrucțiune SQL standard. Apoi puteți parcurge rezultatele cu un foreach și puteți afișa datele preluate.

Mulțumesc pentru răspuns @hosker. Dar eu voiam să știu cum să obțin acel $results

Sunt dispus să ajut, spre deosebire de @rishabh, care a fost destul de amabil să-ți ofere un răspuns complet cu cod, eu doar îți ofeream elementele de bază despre cum să faci ceea ce întrebai. O simplă căutare pe Google și o privire prin WordPress Codex ar fi putut rezolva problema ta. Aceste forumuri sunt aici ca resursă, și eu le folosesc, dar nu m-aș aștepta ca cineva să scrie codul pentru mine. Aveai deja jumătate din el configurat, dar ai fost prea leneș să îți dai seama și să scrii codul singur. Nu înveți niciodată dacă cineva face totul pentru tine.

@hosker ai dreptate, prietene! Studiul individual este obligatoriu... Acum îmi dau seama că nu ar fi trebuit să ofer răspunsul complet.

Hmm! aveți dreptate, băieți. Ceea ce am întrebat aici este pentru referința mea. Ceea ce încerc să fac este ceva diferit. Vreau să știu câteva lucruri pentru a le folosi cu plugin-ul meu. Ceea ce vreau să știu este cum să folosesc aceste interogări pentru a afișa IP-ul pe care îl doresc fără a prelua toate datele din baza de date. Vreau o interogare care să verifice IP-ul pe care îl doresc și apoi să-l afișeze. Ce se întâmplă dacă am 30000 de IP-uri? Va prelua toate cele 30000 de IP-uri folosind foreach
. Asta nu e corect! De aceea am nevoie de ajutorul vostru.

doar să știți că linkul vostru pentru "exemple aici" nu mai funcționează și se schimbă în https://developer.wordpress.org/reference/classes/wpdb/
