$ Wpdb আপডেট সহ ত্রুটিগুলি দেখানো হচ্ছে


21

আমি $wpdb->updateআমার ডাটাবেসে একটি কাস্টম টেবিল আপডেট করতে ব্যবহার করছি । যখন আমি var_dumpফলাফলটি ফিরে আসে:

int(0)

তাই আমি $wpdb->print_error()কী ভুল তা দেখার চেষ্টা করেছি। তবে এটি কিছুই দেখায় না। আমি চেষ্টাও করেছিলাম $wpdb->show_errors(), কিন্তু আবার কিছুই দেখায়নি।

Wpdb ডক্স কিভাবে এই ফাংশন ব্যবহার করার জন্য অনেক বিস্তারিত ঢোকা না, তাই আমি নিশ্চিত নই আমি যদি তাদের সঠিকভাবে ব্যবহার করছি। তবে কেন একটি টেবিল আপডেট করার ফলাফল 0 এ ফিরে আসবে এবং কোনও ত্রুটি প্রদর্শন করবে না?

উত্তর:


21

আমি কী ঘটছে তা দেখতে আপনার প্রশ্নের পরে ঠিক নীচের কোডটি চালানোর পরামর্শ দিচ্ছি:

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

এটি আপনার ডাটাবেসে হিট সর্বশেষ ক্যোয়ারী মুদ্রণ করা উচিত। এই জাতীয় ক্ষেত্রে, আমি সাধারণত phpMyAdmin- এর মাধ্যমে ম্যানুয়ালি এই জাতীয় একটি কোয়েরি চালাবো এটি ত্রুটি ছাড়াই চলে কিনা তা দেখতে এবং এটি ডেটাবেসকেও প্রভাবিত করে কিনা তা দেখার জন্য। অতিরিক্তভাবে, যে ক্যোয়ারীটি আসলে চালিত হয়েছিল তা দেখে আপনি কোয়েরিতে সমস্যাগুলি পেতে পারেন যা আপনার কোড থেকে ফলাফল। উদাহরণস্বরূপ, কোয়েরিটি কোনও মাইএসকিউএল ত্রুটি ফিরিয়ে দিতে পারে না, তবে এটি এমন একটি কোয়েরি চালাতে পারে যা আপনি প্রত্যাশার চেয়ে আলাদা। এই ডিবাগ কোডটি দিয়ে আপনি কমপক্ষে এটি কী তা দেখতে সক্ষম হবেন এবং দুর্দান্ত ডিবাগ ট্রেইল অবিরত রাখতে পারবেন! তদতিরিক্ত, আপনি "ক্লাস ভেরিয়েবলস" ( কোডেক্স রেফ ) এর আরও কিছু অন্বেষণ করতে চাইতে পারেন $wpdbকারণ তারা আপনার সমস্যাটি আরও সমস্যার সমাধানে সহায়তা করতে পারে।


1
বাহ এটি খুঁজছিল
কে। কিলিয়ান লিন্ডবার্গ

এটি কেবল SHOW FULL COLUMNS FROM `` আমার ক্ষেত্রে দেখায়
আদি প্রসত্যও

22

ত্রুটিগুলি দেখান:

  • $wpdb->show_errors = trueWP_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()পদ্ধতি তিনটি ভিন্ন আউটপুট হয়েছে। এটি বিরুদ্ধে পরীক্ষা করার জন্য, আপনি ফলাফল 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
এটি একটি দুর্দান্ত উত্তর! এটি পড়ে আমাকে ওয়ার্ডপ্রেস কোডেক্সে ফিরে যেতে এবং সাধারণভাবে in wpdb সম্পর্কে আরও পড়তে বাধ্য করে made গভীর উত্তরের জন্য আবার ধন্যবাদ।
ক্লকওয়াইজক

ব্যাখ্যায়
আশ্চর্যর

4

একটি শূন্য প্রতিক্রিয়া মানে শূন্য সারি প্রভাবিত, যা ত্রুটি থেকে পৃথক।

আপনার সন্ধানটি না দেখে বলা শক্ত কেন কোনও সারি আপডেট করা হচ্ছে না। একটি ডিবাগ টুল আপনি চেষ্টা করতে পারেন আপনার " SAVEQUERIES" ডাব্লুপি-কনফিগারেশন। পিএফপি ফাইলটিতে সত্য হিসাবে সেট করা ।

তারপরে আপনার ক্যোয়ারি 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));
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.