p wpdb টেবিল কলামে NULL প্রবেশ করবে না


13

যখন আমি এই জাতীয় কিছু চেষ্টা করি

    $status = NULL;

    $wpdb->update(
            'table',
            array( 
                'status' => $status,
            ), 
            array( 'id' => 1 ) 
    );

'স্থিতি' কলামে এখন আমার একটি খালি স্ট্রিং রয়েছে '', এটি কেবল এটিকে NULL তে সেট করে না।

কলামটি অবশ্যই নুল হতে পারে। আমি $ wpdb-> ক্যোয়ারী এবং $ wpdb-> প্রস্তুতও পরীক্ষা করেছি এবং ফলাফলগুলি একই। আমি কি ভুল কিছু করছি?

উত্তর:


9

হালনাগাদ:

ওয়ার্ডপ্রেস 4.4। এই এখন দ্বারা সমর্থিত insert, update, replaceএবং deleteপদ্ধতি wpdbএবং টিকেট # 15158 যেমন বন্ধ করা হয়েছে সংশোধন করা হয়েছে

সেই আপডেট সম্পর্কে মন্তব্য করার জন্য @ ডিএমএসনেলকে ধন্যবাদ ।

অন্যদিকে, nullসমর্থনটি wpdb::prepare()বর্তমানে # 12819 টিকিটে ওয়ন্টফিক্স হিসাবে বন্ধ রয়েছে ।

পূর্ববর্তী উত্তর:

NULL সমর্থিত নয়:

দেখে মনে হচ্ছে আপনার সাথে মানটি আপডেট করতে আপনার নিজস্ব কাস্টম এসকিউএল লিখতে হবে NULL

বর্তমানে NULLএটি সমর্থিত নয় $wpdb->prepare(), যা ভিএসপ্রিন্টফ ফর্ম্যাটিং ফাংশনের মাধ্যমে ইনপুট নেয় ।

এই খোলা ট্র্যাকের টিকিটগুলি দেখুন:

এই টিকিটগুলি প্রায় 4 বছরের পুরানো, সুতরাং এটির মূল সমর্থন না হওয়া পর্যন্ত আমি আমার শ্বাস ধরে থাকব না ;-)

@S_ha_dum প্রস্তাবিত হিসাবে আপনার উত্সটি একবার দেখে নেওয়া উচিত।

একটি সম্ভাব্য কাজ:

আপনি যদি দুঃসাহসী হন তবে আপনি এই queryফিল্টারটি দিয়ে চেষ্টা করতে পারেন :

    // Add a filter to replace the 'NULL' string with NULL
    add_filter( 'query', 'wpse_143405_query' );

    global $wpdb;
    $wpdb->update(
        'table',
        array( 
            'status' => 'NULL',
        ), 
        array( 'id' => 1 ) 
    );

    // Remove the filter again:
    remove_filter( 'query', 'wpse_143405_query' );

কোথায়

/**
 * Replace the 'NULL' string with NULL
 * 
 * @param  string $query
 * @return string $query
 */

function wpse_143405_query( $query )
{
    return str_ireplace( "'NULL'", "NULL", $query ); 
}

'NULL'প্রতিস্থাপনের চেয়ে আপনি সম্ভবত আরও অনন্য স্ট্রিং ব্যবহার করতে চাইতে পারেন '###NULL###'


2
সেটিংয়ের জন্য সমর্থনটি r34737 এNULL যুক্ত করা হয়েছিল , সুতরাং আর কোনও কাজের প্রয়োজন নেই
dmsnell

3

wpdb->update সমস্ত ডেটা ধরণের জন্য একটি স্ট্রিং ডিফল্ট।

বিন্যাস
(অ্যারে | স্ট্রিং) (alচ্ছিক) $ ডেটাতে প্রতিটি মানকে ম্যাপ করার জন্য ফর্ম্যাটগুলির একটি অ্যারে। যদি স্ট্রিং হয়, তবে সেই ফর্ম্যাটটি ডেটাতে সমস্ত মানের জন্য ব্যবহৃত হবে। বাদ দেওয়া থাকলে $ ডেটাতে সমস্ত মান স্ট্রিং হিসাবে বিবেচিত হবে যদি না অন্যথায় নির্দিষ্ট করা থাকে wpdb::$field_types

http://codex.wordpress.org/Class_Reference/wpdb#UPDATE_rows

আপনি একটি ফর্ম্যাট নির্দিষ্ট করতে পারেন তবে অনুমোদিত স্পেসিফায়াররা হলেন:

সম্ভাব্য বিন্যাসের মান :% s স্ট্রিং হিসাবে; পূর্ণসংখ্যা হিসাবে% d (পুরো সংখ্যা) এবং ভাসমান হিসাবে% f। (আরও তথ্যের জন্য নীচে দেখুন)) বাদ দিলে $ সমস্ত মান $ যেখানে স্ট্রিং হিসাবে বিবেচিত হবে।

http://codex.wordpress.org/Class_Reference/wpdb#UPDATE_rows

আপনি উত্স মাধ্যমে পড়া এবং প্রক্রিয়া কাজ করতে পারেন

আপনি যদি wpdb->prepareরিটার্নের ঠিক আগে এসকিউএল ডাম্প করার পদ্ধতিটি (কোনও ডেভ সার্ভারে পর্যায়ক্রমে পরিষ্কার হয়ে যান :)) হ্যাক করেন তবে আপনি দেখতে পাবেন যে প্রতিস্থাপনটি আগে ঘটে wpdb->prepare:

string(48) "UPDATE `table` SET `status` = %s WHERE `id` = %s"

যদিও, @ বিবারগায়ারের পরামর্শ অনুসারে, এটি prepareসেই প্রতিস্থাপনের অনুরোধের একটি সীমা হতে পারে ।


2

আমি ডাব্লুপিপি 4.4 এবং এর বাইরে এটি কীভাবে করব তা আরও ব্যাখ্যা করতে চাই। আপনার কোনও ডেটা এবং ফর্ম্যাট উপাদান উভয়ই সেট করতে হবে যা আপনি কোনও পিএইচপি 'নাল' মানটির জন্য নাল হতে চান।

টিকিট # 15158 এর উদাহরণ নিম্নরূপ:

$wpdb->update($ttable, 
              [
                'user_id' => NULL,
                'status' => 'available',
                'update_time' => $now->format('Y-m-d H:i:s')
              ], [
                'therapist_id' => $therapist_id,
                'user_id' => $user_id,
                'start_time' => $ub['start_time']
              ], [
                 NULL,
                 '%s',
                 '%s'
              ], [
                 '%d',
                 '%d',
                 '%s'
            ]);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.