$ Wpdb güncellemesinde hatalar gösteriliyor


21

$wpdb->updateVeritabanımda bulunan özel bir tabloyu güncelleştirmek için kullanıyorum . Ne zaman var_dumpsonuçlanır onu döndürür:

int(0)

Bu yüzden $wpdb->print_error()yanlış olanı görmeye çalıştım . Ancak hiçbir şey göstermiyor. Ben de denedim $wpdb->show_errors()ama yine hiçbir şey göstermedi.

Wpdb dokümanlar Ben bunları doğru kullanıyorsam emin oldum böylece, bu işlevleri nasıl kullanılacağı konusunda fazla detaya gitmez. Ancak neden bir masanın güncellenmesi sonucu 0 döndürüyor ve herhangi bir hata göstermiyor?

Yanıtlar:


21

Neler olduğunu görmek için sorgunuzdan hemen sonra aşağıdaki kodu çalıştırmanızı tavsiye ederim:

exit( var_dump( $wpdb->last_query ) );

Bu, veritabanınıza giren son sorguyu yazdırmalıdır. Bu gibi durumlarda, genellikle hatasız çalışıp çalışmadığını ve hatta veritabanını etkileyip etkilemediğini görmek için phpMyAdmin aracılığıyla böyle bir sorguyu elle çalıştırırım. Ayrıca, gerçekte çalıştırılan sorguyu görerek, sorguda kodunuzdan kaynaklanan sorunları bulabilirsiniz. Örneğin, sorgu MySQL hatalarını döndürmeyebilir, ancak beklediğinizden farklı bir sorgu çalıştırabilir. Bu hata ayıklama koduyla, en azından ne olduğunu görebilecek ve harika hata ayıklama izinde devam edebileceksiniz! Ayrıca, sorununuzu daha da gidermenize yardımcı olacağı için "Sınıf Değişkenleri" ( Codex Ref ) hakkında daha fazlasını keşfetmek isteyebilirsiniz $wpdb.


1
Vay bunu arıyordum
K. Kilian Lindberg

bu sadece SHOW FULL COLUMNS FROM `` benim durumumda gösteriliyor
Adi Prasetyo,

22

Hataları göster:

  • $wpdb->show_errors = trueolarak WP_DEBUGayarlanmışsa , hataları otomatik olarak gösterir true.
  • $wpdb->suppress_errors = false hataları gizlemeyi durdurur.

  • Multisite özel tedavi gerekir

    // Show errors in Multisite:
    global $wpdb, $blog_id;
    // There's no is_multisite(), so we need to check the ID
    // This means, that we can't debug the blog with the ID 1 as MU-blog by default
    // Check if we are on Blog ID#1 and if not, check the defines and add error handling
    if ( 1 !== $blog_id )
        ! defined( 'DIEONDBERROR' ) AND define( 'DIEONDBERROR', true );

Çıkış işleme

$wpdb->update()Yöntem, üç farklı çıkışa sahiptir. Buna karşı kontrol etmek için, bir sonucu: aa:: $result = $wpdb->update( /* ... */ );.

Şu senaryoları ele al:

  • false === $result: Başarısız
  • 0 === $result: Başarı, ancak güncelleme yok
  • 0 < $result: Başarı

Sınıf çıkışı

  • $wpdb->last_error eğer varsa son hatayı size gösterecektir.
  • $wpdb->last_querySon sorguyu (hatanın oluştuğu yeri) göstermenize yardımcı olacaktır. Temelde aynıdır array_pop( $wpbd->queries );.

Önemli (güvenlik) Not

Lütfen DEĞİL canlı sitede bu kodları ekleyin. Özellikle, önbellek eklentileri söz konusu değilse. Bu, DB ile ilgili önemli verileri ziyaretçilere gösterebilir !

Aksi takdirde yapamazsanız: halkın hata ayıklama çıktısını almasını önlemek için kodunuzu daima koşullu ifadelere sarın!

// Example
function debug_query( $result, $data )
{
    global $current_user;
    get_currentuserinfo();

    if ( current_user_can( 'manage_options' ) )
    {
        global $wpdb, $blog_id;
        1 !== $blog_id
            AND ! defined( 'DIEONDBERROR' )
                AND define( 'DIEONDBERROR', true );

        $wpdb->show_errors     = true;
        $wpdb->suppress_errors = false;

        $output = '<pre style="white-space:pre-line;">';
            $output .= 'Last Error: ';
            $output .= var_export( $wpdb->last_error, true );

            $output .= "\n\nLast Query: ";
            $output .= var_export( $wpdb->last_query, true );

            if ( false === $result )
            {
                $result = new WP_Error( 'query_failed', 'No update.', $data );
            }
            elseif ( 0 === $result )
            {
                $result = new WP_Error( 'update_failed', 'Updated zero rows.', $data );
            }
            elseif ( 0 < $result )
            {
                $result = 'Success';
            }
        $output .= '</pre>';

        // Only abort, if we got an error
        is_wp_error( $result ) 
            AND exit( $output.$result->get_error_message() );
    }
}

Maruz bırakmak $wpdbnesneyi ayrıca veritabanı kullanıcı adı ve şifresini açığa olabilir!


1
bu harika bir cevap! Bunu okumak beni WordPress Kodeksine geri döndürdü ve genel olarak $ wpdb hakkında daha fazla şey okudu. Derinlemesine cevap için tekrar teşekkürler.
clockwiseq

Açıklamada Başar daha fazla ...
Vishal Kumar Sahu

4

Sıfır yanıtı, bir hatadan farklı olarak etkilenen sıfır satır anlamına gelir.

Sorgunuza bakmadan neden hiçbir satırın güncellenmediğini söylemek zor. Deneyebileceğiniz bir hata ayıklama aracı SAVEQUERIESwp-config.php dosyanızda " " değerini true olarak ayarlıyor .

Sonra sorgu çalıştırıldıktan sonra, denemek var_dumping $wpdb->queries.


3
$wpdb->show_errors();
$wpdb->print_error();

2

Sorgunuzdan önce bunu deneyin:

$wpdb->show_errors = TRUE;
$wpdb->suppress_errors = FALSE;

ya da belki sorgunuzdan sonra:

if ($wpdb->last_error) {
  die('error=' . var_dump($wpdb->last_query) . ',' . var_dump($wpdb->error));
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.