$ Wpdb अपडेट के साथ त्रुटियां दिखा रहा है


21

मैं $wpdb->updateअपने डेटाबेस में एक कस्टम टेबल अपडेट करने के लिए उपयोग कर रहा हूं। जब मैं var_dumpपरिणाम देता हूं तो यह वापस आ जाता है:

int(0)

इसलिए मैंने $wpdb->print_error()यह देखने की कोशिश की कि क्या गलत है। हालाँकि, यह कुछ नहीं दिखाता है। मैंने भी कोशिश की $wpdb->show_errors(), लेकिन फिर कुछ नहीं दिखा।

Wpdb डॉक्स कैसे इन कार्यों का उपयोग करने पर ज्यादा विस्तार में जाने नहीं है, इसलिए मैं अनिश्चित हूं कि अगर मैं उन्हें सही ढंग से उपयोग कर रहा हूँ। लेकिन टेबल रिटर्न 0 को अपडेट करने का परिणाम क्यों होगा, और कोई त्रुटि नहीं दिखेगी?

जवाबों:


21

मैं यह देखने के लिए कि क्या हो रहा है, आपकी क्वेरी के ठीक बाद निम्नलिखित कोड चलाने की सिफारिश करेगा:

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

यह अंतिम क्वेरी को प्रिंट करना चाहिए जो आपके डेटाबेस को हिट करती है। इन मामलों में, मैं आमतौर पर phpMyAdmin के माध्यम से मैन्युअल रूप से ऐसी क्वेरी चलाऊंगा कि क्या यह बिना त्रुटियों के चलता है और यह देखने के लिए कि क्या यह डेटाबेस को भी प्रभावित करता है। इसके अतिरिक्त, वास्तव में चलाई गई क्वेरी को देखकर, आपको अपने कोड के परिणाम में क्वेरी में समस्याएँ मिल सकती हैं। उदाहरण के लिए, क्वेरी किसी भी MySQL त्रुटियों को वापस नहीं कर सकती है, लेकिन यह एक क्वेरी चला सकती है जो कि आपके द्वारा इसकी अपेक्षा अलग है। इस डिबग कोड के साथ, आप कम से कम यह देख पाएंगे कि यह क्या है और अद्भुत डिबग ट्रेल पर जारी है! इसके अलावा, आप "वर्ग चर" ( कोडेक्स रेफरी ) के बारे $wpdbमें अधिक जानकारी प्राप्त करना चाहते हैं क्योंकि वे आपकी समस्या का निवारण करने में मदद कर सकते हैं।


1
वाह इसके लिए देख रहे थे
। किलियन लिंडबर्ग

यह सिर्फ SHOW FULL COLUMNS FROM `` मेरे मामले में दिखाता है
आदि प्रिसिओ

22

त्रुटियां दिखाएं:

  • $wpdb->show_errors = trueयदि स्वचालित रूप WP_DEBUGसे सेट किया गया है , तो त्रुटियों को दिखाता है true
  • $wpdb->suppress_errors = false त्रुटियों को दबाने से रोकता है।

  • मल्टीसाइट को विशेष उपचार की आवश्यकता होती है

    // 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 );

आउटपुट हैंडलिंग

$wpdb->update()विधि तीन अलग अलग outputs है। इसके खिलाफ जाँच करने के लिए, आपको परिणाम ia var बचाना होगा $result = $wpdb->update( /* ... */ );:।

उन परिदृश्यों को संभालें:

  • false === $result: विफल
  • 0 === $result: सफलता, लेकिन कोई अद्यतन नहीं
  • 0 < $result: सफलता

कक्षा उत्पादन

  • $wpdb->last_error यदि आपको एक मिला है, तो आपको अंतिम त्रुटि दिखाएगा।
  • $wpdb->last_queryअंतिम क्वेरी (जहां त्रुटि हुई) को दिखाने में आपकी सहायता करेगा। यह मूल रूप से के रूप में ही है array_pop( $wpbd->queries );

महत्वपूर्ण (सुरक्षा) नोट

कृपया इस कोड को लाइव साइट पर जोड़ें। विशेष रूप से नहीं तो कैशिंग प्लगइन्स शामिल हैं। यह आगंतुकों के लिए महत्वपूर्ण डीबी-संबंधित डेटा को उजागर कर सकता है !

यदि आप अन्यथा नहीं कर सकते: हमेशा डिबग आउटपुट का सामना करने से रोकने के लिए अपने कोड को सशर्त बयानों में लपेटें!

// 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() );
    }
}

$wpdbऑब्जेक्ट एक्सपोज़ करने से आपका डेटाबेस उपयोगकर्ता नाम और पासवर्ड भी उजागर हो सकता है!


1
यह एक शानदार जवाब है! इसे पढ़ने से मुझे वर्डप्रेस कोडेक्स पर वापस जाना पड़ा और सामान्य तौर पर $ wpdb के बारे में अधिक पढ़ा गया। फिर से गहराई से जवाब के लिए धन्यवाद।
दक्षिणावर्त

विस्मय से अधिक स्पष्टीकरण ...
विशाल कुमार साहू

4

शून्य प्रतिक्रिया का मतलब है शून्य पंक्तियाँ प्रभावित होना, जो एक त्रुटि से अलग है।

अपनी क्वेरी को देखे बिना यह कहना कठिन है कि कोई पंक्तियों को अपडेट क्यों नहीं किया जा रहा है। एक डिबग टूल जिसे आप आज़मा सकते हैं सेटिंग है "SAVEQUERIES , अपनी wp-config.php फ़ाइल में सही करने के लिए " ।

फिर आपकी क्वेरी चलने के बाद, var_dumpआईएनजी आज़माएं $wpdb->queries



2

अपनी क्वेरी से पहले यह प्रयास करें:

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

या शायद आपके प्रश्न के बाद:

if ($wpdb->last_error) {
  die('error=' . var_dump($wpdb->last_query) . ',' . var_dump($wpdb->error));
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.