dbDelta টেবিল তৈরি করছে না


15

আমি প্রচুর থ্রেড, কোডেক্স পৃষ্ঠা দিয়ে চলেছি এবং প্রচুর জিনিস নিয়ে গণ্ডগোলের চেষ্টা করেছি তবে আমার কোডটি টেবিলগুলি তৈরি করছে বলে মনে হয় না। এবং আমি কোথায় ভুল করছি তা নির্ধারণ করতে পারছি না। আমি ডাটাবেসে বুকিং_ডিবি_আরওশনটি চেক করেছি, আমি ফাইলটিতে এটি আপডেট করলে এটি আপডেট হয়।

এখানে কোড

global $booking_db_version;
$booking_db_version = "1.0.0";

function booking_install() {
    global $wpdb;
    global $booking_db_version;
    global $tableprefix;
    $installed_version = get_option('booking_db_option');

    $tableprefix = $wpdb->prefix . 'booking_';

    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');

    if ( $installed_version !== $booking_db_version ) {
        /* Create table for packages */
        $packagetable = $tableprefix . 'packages';
        $sql = "create table  $packagetable (
            id mediumint(9) NOT NULL AUTO_INCREMENT, 
            name text NOT NULL, 
            description text NOT NULL, 
            city1 text NOT NULL, 
            city2 text NOT NULL,
            PRIMARY KEY  (id)
        );";
        dbDelta($sql);

        /* Create table for hotels */
        $hoteltable = $tableprefix . 'hotels';
        $sql = "create table $hoteltable (
            id mediumint(9) NOT NULL AUTO_INCREMENT, 
            name text NOT NULL, 
            city text NOT NULL, 
            price decimal(10,2) NOT NULL,
            PRIMARY KEY  (id)
        );";
        dbDelta($sql);

        /* Create table for addons */
        $addontable = $tableprefix . 'addons';
        $sql = "create table $addontable (
            id mediumint(9) NOT NULL AUTO_INCREMENT, 
            name text NOT NULL, 
            addongroup text NOT NULL, 
            price decimal(10,2) NOT NULL,
            PRIMARY KEY  (id)
        );";
        dbDelta($sql);

        /* Create table for addon groups */
        $addongrouptable = $tableprefix . 'addon_groups';
        $sql = "create table $addongrouptable (
            id mediumint(9) NOT NULL AUTO_INCREMENT, 
            name text NOT NULL, 
            perhead text NOT NULL,
            PRIMARY KEY  (id)
        );";
        dbDelta($sql);

        update_option('booking_db_version', $booking_db_version);
    }
}
register_activation_hook(__FILE__, 'booking_install');

উত্তর:


18

ডিবিডেল্টা সম্পর্কে ওয়ার্ডপ্রেস-কোডেক্স থেকে :

DbDelta ফাংশনটি বর্তমান টেবিলের কাঠামোটি পরীক্ষা করে, এটি পছন্দসই টেবিল কাঠামোর সাথে তুলনা করে, এবং হয় প্রয়োজনীয় হিসাবে টেবিলটি যুক্ত বা সংশোধন করে, সুতরাং এটি আপডেটের জন্য খুব সহজ হতে পারে (আরও উদাহরণগুলির জন্য ডাব্লুপি-অ্যাডমিন / আপগ্রেড-স্কিমা.এফপি দেখুন) কীভাবে dbDelta ব্যবহার করবেন)। মনে রাখবেন যে dbDelta ফাংশনটি বরং পিক। এই ক্ষেত্রে:

  • আপনার এসকিউএল স্টেটমেন্টে আপনাকে অবশ্যই প্রতিটি ক্ষেত্রের নিজস্ব লাইনে রাখতে হবে।
  • প্রাথমিক কী এবং আপনার প্রাথমিক কী এর সংজ্ঞা এর মধ্যে আপনার দুটি স্পেস থাকতে হবে।
  • আপনার মূল শব্দটি KEY এর পরিবর্তে INDEX সমার্থক শব্দ ব্যবহার করতে হবে এবং আপনাকে কমপক্ষে একটি KEY অন্তর্ভুক্ত করতে হবে।
  • আপনাকে ক্ষেত্রের নামগুলির আশেপাশে কোনও অ্যাড্রোস্ট্রস বা ব্যাকটিক ব্যবহার করা উচিত নয়।

এই সাবধানতার সাথে, আমাদের ফাংশনের পরবর্তী লাইনগুলি এখানে দেওয়া হয়েছে, যা আসলে টেবিলটি তৈরি বা আপডেট করবে। আপনার নিজের টেবিলের কাঠামোটি বর্গ স্কয়ারে পরিবর্তন করতে হবে।

আমি আপনার এসকিএল পরিবর্তন করেছি: "create table $packagetable (

এটি: "CREATE TABLE " . $packagetable . " (

আপনার কোডটির একটি কার্যকরী কপি এখানে দেওয়া হয়েছে:

global $booking_db_version;
$booking_db_version = "1.0.0";

function booking_install() {
    global $wpdb;
    global $booking_db_version;
    global $tableprefix;
    $installed_version = get_option('booking_db_option');

    $tableprefix = $wpdb->prefix . 'booking_';

    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');

    if ( $installed_version !== $booking_db_version ) {
        // Create table for packages 
        $packagetable = $tableprefix . 'packages';
        $sql = "CREATE TABLE " . $packagetable . " (
            id INT NOT NULL AUTO_INCREMENT, 
            name TEXT NOT NULL, 
            description TEXT NOT NULL, 
            city1 TEXT NOT NULL, 
            city2 TEXT NOT NULL,
            PRIMARY KEY  (id)
        ) ". $charset_collate .";";
        dbDelta($sql);

        // Create table for hotels 
        $hoteltable = $tableprefix . 'hotels';
        $sql = "CREATE TABLE " . $hoteltable . " (
            id mediumint(9) NOT NULL AUTO_INCREMENT, 
            name text NOT NULL, 
            city text NOT NULL, 
            price decimal(10,2) NOT NULL,
            PRIMARY KEY  (id)
        ) ". $charset_collate .";";
        dbDelta($sql);

        // Create table for addons 
        $addontable = $tableprefix . 'addons';
        $sql = "CREATE TABLE " . $addontable . " (
            id mediumint(9) NOT NULL AUTO_INCREMENT, 
            name text NOT NULL, 
            addongroup text NOT NULL, 
            price decimal(10,2) NOT NULL,
            PRIMARY KEY  (id)
        ) ". $charset_collate .";";
        dbDelta($sql);

        // Create table for addon groups 
        $addongrouptable = $tableprefix . 'addon_groups';
        $sql = "CREATE TABLE " . $addongrouptable . " (
            id mediumint(9) NOT NULL AUTO_INCREMENT, 
            name text NOT NULL, 
            perhead text NOT NULL,
            PRIMARY KEY  (id)
        ) ". $charset_collate .";";
        dbDelta($sql);

        update_option('booking_db_version', $booking_db_version);
    }
}
register_activation_hook(__FILE__, 'booking_install');

1
এটা কাজ করেছে। আমি পড়লাম যে ডিবিডেল্টা চিকিত্সা, তবে বুঝতে পারিনি যে মূলধন না CREATE TABLEকরলে এটি ব্যর্থ হয়।
মেহুলভেদ

2
যদিও ওয়ার্ডপ্রেস তাদের কোডেক্স পৃষ্ঠায় এটি না বলে, আপনার শেষ লাইনে একটি পিছনে কমা থাকতে পারে না। উদাহরণ: PRIMARY KEY (id),। ডিবিডেল্টা আসলে বলেছেন যে এটি টেবিলটি তৈরি করেও তা তৈরি করে না
জোময়ে ১৯৮৮

1
কেবল রেফারেন্সের জন্য, পেছনের কমা সহ সমস্যাটি PRIMARY KEY (id),একটি এসকিউএল সমস্যা, ডিবিডেল্টা বা ডব্লিউপি সমস্যা নয়। অতএব কোনও ডকুমেন্টেশন নেই।
জেরেমি

নোট করুন যে dbDelta()আপনার সাথে একাধিক প্রশ্ন তৈরি করার সময় প্রতিটি প্রশ্নের জন্য পৃথকভাবে dbDeltaকল করার পরিবর্তে আপনার এসকিউএলগুলি একটি অ্যারে হিসাবে পাস করতে পারে dbDelta
toni_lehtimaki

1

আপনি এই ফাংশনটি চেষ্টা করতে পারেন :

$table_name = "ratings";

$table_columns = "id INT(6) UNSIGNED AUTO_INCREMENT,
                    rate tinyint(1) NOT NULL,
                    ticket_id bigint(20) NOT NULL,
                    response_id bigint(20) NOT NULL,
                    created_at TIMESTAMP";

$table_keys = "PRIMARY KEY (id),
                    KEY ratings_rate (rate),
                    UNIQUE KEY ratings_response_id (response_id)";

create_table($table_name, $table_columns, $table_keys);

0

'তৈরি টেবিল' পরিবর্তে 'তৈরি টেবিল' ব্যবহার করা আমার জন্য সমস্যার সমাধান করে।


0

এই গুরুত্বপূর্ণ পয়েন্টগুলি ছাড়াও আপনার অ্যাক্টিভেশন হুকটি ট্রিগার করা উচিত।

আপনি যখন আপনার প্লাগইনটি বিকাশ করেছেন এবং সঠিক কোড লিখেছেন, তবুও আপনার প্রয়োজন হুকটি ট্রিগার করতে আপনার প্লাগইনটি পুনরায় সক্রিয় করতে হবে, তাই প্লাগইনটি সক্রিয় হওয়ার পরে আপনার টেবিলটি তৈরি হবে।


-2

এসকিউএল কীওয়ার্ডগুলি, যেমন তৈরি করুন এবং আপডেটের মতো, অবশ্যই বড় হাতের হতে হবে। সুতরাং তৈরি টেবিলের লাইনটি এতে পরিবর্তন করুন:

"CREATE TABLE " . $packagetable . "( 

এবং

id mediumint(9) NOT NULL AUTO_INCREMENT,

প্রতি:

id MEDIUMINT(9) NOT NULL AUTO_INCREMENT,

অথবা এটা:

name text NOT NULL, 

প্রতি:

name TEXT NOT NULL, 

ইত্যাদি


"[…] এর মতো এসকিউএল কীওয়ার্ডগুলি অবশ্যই বড় হাতের হওয়া উচিত" । দুঃখিত, তবে না, এটি সত্য নয়।
কায়সার

dbDelta ফাংশন ব্যবহার করার জন্য, আমাদের বড় হাতের ব্যবহার করা উচিত। এই পৃষ্ঠাটি চেক করুন: codex.wordpress.org/Creating_Tables_with_Plugins
শিরিন Niki

দুঃখিত, তবে আমি এটি উত্সটিতে কোথাও পড়তে পারি । আমি কি কিছু রেখে গেলাম? হতে পারে আপনি নিজের উত্তরে মিনি-প্লাগইন উদাহরণ যুক্ত করতে চান যা দেখায় যে এটি ব্যর্থ হয় (যা কেহ নিতে পারে এবং পরীক্ষা করতে পারে) লোয়ার কেসড সিনট্যাক্স সহ?
কায়সার

এই লিঙ্কটিতে: লিঙ্ক , সারণী তৈরি বা আপডেট করার প্রথম অনুচ্ছেদটিতে এই সমস্যাটি উল্লেখ করা হয়েছে।
shirin niki

এই কেবল সত্য CREATE TABLE, CREATE DATABASE, INSERT INTO, এবং UPDATE। অন্য সমস্ত কিছুই হয় কেস-সংবেদনশীল তুলনায় ব্যবহৃত হয় না বা লোয়ার কেসে রূপান্তরিত হয় । আপনার পরামর্শগুলির কোনও প্রভাব নেই।
ফুসিয়া
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.