2012-12-19 14 views
5

Ho aggiornato a Wordpress 3.5 due giorni fa. Non uso molti plug-in e GoDaddy mi assicura che i miei plugin funzionano correttamente. Tuttavia, sto ricevendo questo messaggio di errore sui post del mio blog per la prima volta.Avviso: argomento mancante 2 per wpdb :: prepare(),

Potete per favore aiutarmi a risolvere questo?

Attenzione: mancante argomento 2 per wpdb :: preparare(), chiamato in /home/content/52/8331652/html/wp-content/themes/chateau-2.0/functions.php on line 91 e definita in /home/content/52/8331652/html/wp-includes/wp-db.php sulla linea 990

Here è una delle pagine che presenta questo problema sul lato destro dello schermo in alto del post.

Grazie per qualsiasi suggerimento è possibile fornire.

+0

Aprire il file /home/content/52/8331652/html/wp-content/themes/chateau-2.0/functions.php e incollare nella riga 91, in modo che possiamo vedere cosa sta succedendo. –

+0

puoi mostrare la funzione che sta generando l'errore sulla riga 91 in 'themes/chateau-2.0/functions.php'? –

+0

Forse dovresti [Google la prossima volta] (http://make.wordpress.org/core/2012/12/12/php-warning-missing-argument-2-for-wpdb-prepare/) –

risposta

4

In wp-config.php aggiungere questa riga:

@ini_set('display_errors', 0); 

Il vostro tema/plugin non accedere alla nuova API di WordPress correttamente. Funzionerà ancora ma genererà l'avviso di errore. Controlla lo longer explanation.

+0

Come trovo il file php.ini? Ho letto che non è un file wordpress. Grazie. –

+0

Ho appena chiamato GoDaddy e mi hanno aiutato con le note di aiuto. Grazie. –

8

WordPress 3.5 ha apportato alcune modifiche importanti per ridurre alcuni rischi per la sicurezza, come ad esempio SQL Injection. Il metodo wpdb::prepare veniva utilizzato in modo non preciso poiché gli sviluppatori di plug-in inviavano query complete invece di separare gli argomenti. Ciò significava che le istruzioni "preparate" non erano state preparate e in effetti stavano trasmettendo direttamente i parametri nella query, che è un no-no di sicurezza. A partire da 3.5, questo metodo ora richiede tre argomenti.

Per contrastare il problema immediato, modificare il file php.ini, trovare la linea per error_reporting e modificarlo al seguente ...

error_reporting(E_ALL & ~(E_NOTICE|E_WARNING)); 

Riavviare il server.

Ciò impedirà la segnalazione di tutti gli errori di script minori.

In alternativa, inviare errori a un file di registro. Nel php.ini, trovare questa linea (rimuovere il commento di esso), e modificarlo in ...

error_log "/path/to/php-error.log" 

che impedirà errori venga visualizzato sul tuo sito web. Invece saranno scritti in un registro che solo tu puoi vedere.

Se questo errore ti infastidisce, puoi provare a fare in modo che il plug-in rogue utilizzi valori fittizi. Possiamo vedere che il metodo wpdb::prepare prende tre argomenti ...

$wpdb->query( 
    $wpdb->prepare( 
     " 
      DELETE FROM $wpdb->postmeta 
      WHERE post_id = %d 
      AND meta_key = %s 
     ", 
     13, 'stack overflow' 
    ) 
); 

Rendendo il plug-in colpita inviare un null come secondo e terzo argomento nel metodo, si risolverà completamente il problema.

1

In functions.php aggiungere "" come parametro dopo la query.

0

Anche io stavo affrontando lo stesso problema. Aggiungo questo codice nel mio file wp-config.php.

@ini_set('display_errors', 0); 

Quindi ero molto felice, non c'era ancora nessun messaggio di avviso.

0

Essa si verifica perché

$ wpdb-> preparare deve essere eseguito con un parametro.

Non hai parametri?

Poi, in alternativa:

Add DOVE alla ricerca:

$sql = "SELECT * FROM TB_YOUR_TABLE WHERE %d AND ..."; 

Magic Key = DOVE% d deve essere vero

E includere un vero parametro:

$results = $wpdb->get_results( 
       $wpdb->prepare($sql,1) 
      ); 

è vero per mysql

Spero che aiuti!

Problemi correlati