Cum să prelucrezi date în WordPress folosind MySQLi sau $wpdb

25 iul. 2016, 02:56:14
Vizualizări: 97.3K
Voturi: 11

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:

  1. Cum să afișez toate datele din tabel?
  2. Cum să înlocuiesc datele dacă o condiție este îndeplinită. De exemplu, vreau să modific time unde user_ip = 245.356.134.22

Te rog să-mi spui dacă sunt alte lucruri pe care ar trebui să le învăț.

Mulțumesc

0
Toate răspunsurile la întrebare 3
6
11

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
}
25 iul. 2016 10:24:05
Comentarii

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.

Ramesh Pardhi Ramesh Pardhi
25 iul. 2016 11:16:51

Ai văzut răspunsul actualizat?

Rishabh Rishabh
26 iul. 2016 08:32:41

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?

Ramesh Pardhi Ramesh Pardhi
26 iul. 2016 15:04:36

Răspunsul a fost actualizat! Verifică dacă este ceea ce ai nevoie.

Rishabh Rishabh
27 iul. 2016 08:18:17

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

Ramesh Pardhi Ramesh Pardhi
27 iul. 2016 09:34:50

Da, poți folosi așa$results = $wpdb->get_results( "SELECT user_ip FROM $table_name WHERE user_ip = '$username' ");

Rishabh Rishabh
27 iul. 2016 11:57:01
Arată celelalte 1 comentarii
2
//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' )
);
27 iul. 2016 08:29:20
Comentarii

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

Rishabh Rishabh
27 iul. 2016 09:01:03

@Rishabh nu este nevoie de mai multe comentarii, deoarece am introdus comentarii adecvate înaintea codului.

Ganesh Ganesh
27 iul. 2016 09:36:49
5

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

25 iul. 2016 03:43:01
Comentarii

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

Ramesh Pardhi Ramesh Pardhi
25 iul. 2016 11:18:43

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 hosker
26 iul. 2016 02:16:29

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

Rishabh Rishabh
26 iul. 2016 08:36:54

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.

Ramesh Pardhi Ramesh Pardhi
26 iul. 2016 15:13:04

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/

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