2012-12-19 8 views
5

Zostałem zaktualizowany do Wordpress 3.5 dwa dni temu. Nie używam wielu wtyczek, a GoDaddy zapewnia, że ​​moje wtyczki działają poprawnie. Jednak po raz pierwszy otrzymuję ten komunikat o błędzie na moich blogach.Ostrzeżenie: Brakuje argumentu 2 dla wpdb :: prepare(),

Czy możesz mi pomóc rozwiązać ten problem?

Uwaga: Nie argumentu 2 do wpdb :: wytwarzania(), zwany w /home/content/52/8331652/html/wp-content/themes/chateau-2.0/functions.php na linii 91 i określone w /home/content/52/8331652/html/wp-includes/wp-db.php on line 990

Here jest jedną ze stron, która ma ten problem, po prawej stronie ekranu w górę postu.

Dzięki za wszelkie informacje, które możesz dostarczyć.

+0

Otwórz swój /home/content/52/8331652/html/wp-content/themes/chateau-2.0/functions.php i wklej w linii 91, abyśmy mogli zobaczyć, co się dzieje. –

+0

można wyświetlić funkcję, która generuje błąd w linii 91 w "themes/chateau-2.0/functions.php"? –

+0

Może powinieneś [Google to następnym razem] (http://make.wordpress.org/core/2012/12/12/php-warning-missing-argument-2-for-wpdb-prepare/) –

Odpowiedz

4

W wp-config.php dodać linię:

@ini_set('display_errors', 0); 

Twój theme/plugin nie otworzyć nowy WordPress API poprawnie. Nadal będzie działać, ale wygeneruje ostrzeżenie o błędzie. Sprawdź numer longer explanation.

+0

Jak znaleźć plik php.ini? Czytałem, że to nie jest plik wordpress. Dziękuję Ci. –

+0

Po prostu zadzwoniłem do GoDaddy i pomogli mi z twoimi notatkami pomocy. Dzięki. –

8

WordPress 3.5 wprowadził kilka istotnych zmian, aby zmniejszyć pewne zagrożenia bezpieczeństwa, takie jak SQL Injection. Metoda wpdb::prepare była używana niezawodnie, ponieważ twórcy wtyczek wysyłali kompletne zapytania zamiast oddzielać argumenty. Oznaczało to, że "przygotowane" wyciągi nie były przygotowane i faktycznie przekazywały parametry bezpośrednio do zapytania, co jest zabezpieczeniem nie-nie. Od wersji 3.5 ta metoda przyjmuje teraz trzy argumenty.

Aby przeciwdziałać natychmiastowej problem, edytować plik php.ini, znajdź linię dla error_reporting i zmienić je na następujące ...

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

Uruchom ponownie serwer.

Zapobiegnie to zgłaszaniu wszystkich pomniejszych błędów skryptu.

Alternatywnie, wyślij błędy do pliku dziennika. W php.ini znajdź ten wiersz komentarza (to), i zmienić go ...

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

To będzie uniknąć błędów, które są wyświetlane na swojej stronie internetowej. Zamiast tego zostaną zapisane w dzienniku, który tylko Ty możesz zobaczyć.

Jeśli ten błąd Cię niepokoi, możesz spróbować użyć fałszywej wtyczki do użycia fałszywych wartości. Widzimy, że metoda wpdb::prepare trwa trzy argumenty ...

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

Dokonując narażona plug-in wysłać null jako drugiego i trzeciego argumentu w metodzie będzie rozwiązać ten problem całkowicie.

1

W functions.php dodaj "" jako parametr po zapytaniu.

0

Miałem też ten sam problem. Dodaję ten kod do pliku wp-config.php.

@ini_set('display_errors', 0); 

Wtedy byłem bardzo szczęśliwy, znowu nie było żadnego ostrzeżenia.

0

Występuje ponieważ

$ wpdb-> przygotować musi być wykonany z parametru.

Nie masz parametrów?

Następnie alternatywą:

Add WHERE zapytań:

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

magiczny klucz = gdzie% d musi być prawdą

I to prawdziwy parametr:

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

jest prawdziwe dla mysql

Mam nadzieję, że pomoże!

Powiązane problemy