$wpdb->delete valori di colonna IN ARRAY()?

22 mag 2016, 10:04:44
Visualizzazioni: 21.9K
Voti: 5

Mi chiedo se questo è possibile?

$wpdb->delete(
    'table_name',
    array('id' => array(1, 2, 3)),
    array('%d')
);

Quindi, in questa situazione, dovrebbe rimuovere 3 righe contemporaneamente e chiamare il database solo 1 volta. Ho molte eliminazioni che potrebbero essere possibili con il mio script e preferirei che eseguisse l'eliminazione una sola volta, invece di dover ciclare attraverso tutti gli ID ed eseguire un $wpdb->delete su ciascuno individualmente. È possibile? Sembra che dovrebbe esserlo...

3
Commenti

Hai provato? O meglio ancora, hai cercato?

Tim Malone Tim Malone
22 mag 2016 12:37:53

Sì, ho esaminato la funzione e non sembrava possibile. Ma onestamente, dovrebbe essere fattibile, dato che non c'è molta differenza e avrebbe senso includerla in questa funzione.

Solomon Closson Solomon Closson
22 mag 2016 20:34:57

Non capisco perché il downvote qui... magari chi l'ha fatto può aiutarmi a capire il motivo? Perché l'ignoranza nel chiedere se ho cercato? Certo che l'ho fatto, e ho pensato di chiedere comunque. Non è a questo che serve questo sito?

Solomon Closson Solomon Closson
22 mag 2016 20:44:53
Tutte le risposte alla domanda 1
6
12

No, wpdb::delete non gestisce nient'altro oltre a WHERE campo = X. Puoi semplicemente usare il metodo query invece:

$ids = implode( ',', array_map( 'absint', $ids ) );
$wpdb->query( "DELETE FROM nome_tabella WHERE ID IN($ids)" );
22 mag 2016 13:05:23
Commenti

Grazie, sono a conoscenza delle alternative. Non vedo la rilevanza dell'uso di absint dato che sarebbe rilevante solo per colonne UNSIGNED, e potrebbe non essere il caso. Ma grazie comunque per il tuo esempio di metodo alternativo.

Solomon Closson Solomon Closson
22 mag 2016 20:43:32

Sto solo dimostrando un livello di sanitizzazione; dubito che i tuoi ID siano hard-coded?

TheDeadMedic TheDeadMedic
22 mag 2016 20:45:23

Sì, gli id non sono hardcoded, sono all'interno di un array, quindi questo è un buon esempio, semplicemente non usando absint suppongo. Grazie comunque.

Solomon Closson Solomon Closson
22 mag 2016 21:02:32

Ok, allora usa semplicemente intval invece

TheDeadMedic TheDeadMedic
22 mag 2016 21:02:57

Vero, immagino che dovrebbero aggiungere questa funzionalità in Wordpress, sembra abbastanza semplice da implementare. Ma fino ad allora, questa risposta va bene.

Solomon Closson Solomon Closson
22 mag 2016 21:03:36

Se vuoi questa funzionalità, apri un ticket su trac - questa è la bellezza dell'open source, è costruito da tutti noi.

TheDeadMedic TheDeadMedic
22 mag 2016 21:04:41
Mostra i restanti 1 commenti