Folosirea $wpdb->update dar sunt confuz în legătură cu WHERE și SET

13 feb. 2019, 14:32:41
Vizualizări: 15.2K
Voturi: 2

Sunt confuz în legătură cu utilizarea lui WHERE în $wpdb->update :/ Ultimele linii din codul meu ar trebui să actualizeze o tabelă cu o adresă IP când software-ul este activat. Dacă IP-ul se schimbă, înregistrează a doua adresă IP. Acum se activează, dar nu înregistrează în tabelă IP-urile și aruncă o eroare în log. Știu că nu înțeleg cum să folosesc $wpdb->update. Înainte foloseam cod MySQL într-un script separat și funcționa, dar acum am o eroare de query greșit. Eroarea spune: Unknown column '0' in 'where clause' for query UPDATE ma1n_ipn_data_tbl SET 0 = '118.210.134.xxx' WHERE 0 = '1' COD: Aici sunt liniile mai clar dacă codul de mai jos este lipit incorect: http://prntscr.com/mkiukd

Am nevoie de ajutor dacă puteți da un exemplu de: update table set IP to $variable from getip.php where item_name = etc.. Mulțumesc :P COD:

                          //TOT FUNCȚIONEAZĂ MAI SUS// 
        if ($row->ip_address_01 == 0){ 
         $wpdb->update($ipn_table, array( $row->ip_address_01 = $ipONactivate ),array(($row->payer_email = $serial) && ($row->item_name = $product)));  
    //  $sql=( "UPDATE $ipn_table SET ip_address_01 = $ipONactivate WHERE payer_email = $serial && item_name = $product" ); //ANTERIOR
     } else { 
        if ($row->ip_address_01 !== $ipONactivate && $row->ip_address_02 == 0){
        $wpdb->update($ipn_table, array( $row->ip_address_02 = $ipONactivate),array($row->payer_email = $serial && $row->item_name = $product));    
    //  $sql=( "UPDATE $ipn_table SET ip_address_02 = $ipONactivate WHERE payer_email = $serial && item_name = $product" ); //ANTERIOR
        } else {    
            echo false;
        }
       }                                                        //EROARE
                        //Unknown column '0' in 'where clause' for query UPDATE `ma1n_ipn_data_tbl` SET `0` = '118.210.134.xxx' WHERE `0` = '1'
0
Toate răspunsurile la întrebare 1
2

Trebuie să consultați documentația funcției, care este disponibilă aici.

Funcția acceptă următoarele argumente:

  • $table Numele tabelului.
  • $data Un array PHP în care cheile sunt coloanele, iar valorile sunt valorile care trebuie introduse în acele coloane.
  • $where Un array PHP în care cheia este numele coloanei, iar valoarea este valoarea care trebuie verificată.

Și încă două argumente opționale care pot fi folosite pentru a forța valorile din al doilea și al treilea argument să fie de anumite tipuri. Consultați documentația pentru mai multe detalii despre acestea.

Ceea ce ați făcut este să amestecați sintaxa PHP și SQL pentru al doilea și al treilea argument ($row->ip_address_01 = $ipONactivate atribuie $ipONactivate lui $row->ip_address_01, nu creează un array). De asemenea, încercați să folosiți valoarea unei coloane dintr-o interogare anterioară (de ex. $row->ip_address_01) ca nume de coloană.

Trebuie să formatați argumentele astfel:

$wpdb->update(
    $ipn_table,
    array( 
        'ip_address_01' => $ipONactivate
    ),
    array(
        'payer_email' => $serial,
        'item_name'   => $product,
    )
);

Această funcție va actualiza coloana ip_address_01 pentru orice rând în care payer_email este $serial și item_name este $product. Echivalentul în SQL ar fi:

$sql = "UPDATE {$ipn_table} SET ip_address_01='{$ipONactivate}' WHERE payer_email='{$serial}' AND item_name='{$product}'";

Avantajul funcției este că vă scutește de a scrie întreaga interogare (aveți nevoie doar de numele coloanelor și valori) și, de asemenea, pregătește și escapează valorile pentru dvs., astfel încât să nu fiți vulnerabil la injecții SQL (lucru care s-ar putea întâmpla dacă ați folosi exemplul meu SQL așa cum este).

13 feb. 2019 14:52:39
Comentarii

Mulțumesc pentru explicație, Jacob. Atât tu, cât și Krzysiek ați fost foarte răbdători și de ajutor cu cei care învață mai încet, și cred că apreciem explicațiile MAI MULT tocmai pentru că, simt, documentația este uneori puțin „greacă”, în funcție de sursă (fără joc de cuvinte) și diferite moduri de a face același lucru de la diferiți oameni devine confuz pe internet, dar tu ai explicat-o bine.

Nici măcar nu voi încerca codul până nu îl citesc, compar și înțeleg. Din nou, mulțumesc. :)

Schmutly Schmutly
14 feb. 2019 00:37:58

Wow. Ce explicație frumoasă. Mulțumesc

melvin melvin
10 iul. 2023 13:12:35