আমি কি ডাব্লুপিডিবি প্রস্তুত ব্যবহার করব?


28

আমি এসকিউএল-এ নতুন এবং ভাবছি যে আমি wpdb->prepareতৈরি করা একটি টেবিলের জন্য নিম্নলিখিত কোয়েরিটি ব্যবহার করতে হবে কিনা wond

global $wpdb;
$tablename = $wpdb->prefix . "my_custom_table";
$sql = "SELECT * FROM " . $tablename . " ORDER BY date_created DESC";
$resulst = $wpdb->get_results( $sql , ARRAY_A );

আমার prepareকি এখানে ব্যবহার করা দরকার ? আমি যে কিভাবে করতে হবে?

চিয়ার্স

উত্তর:


33

এটি সর্বদা ব্যবহার করা সবচেয়ে ভাল অনুশীলন prepareতবে এর মূল ব্যবহারটি এসকিউএল ইনজেকশন আক্রমণগুলির বিরুদ্ধে প্রতিরোধ করা এবং যেহেতু ব্যবহারকারী / দর্শকদের কাছ থেকে কোনও ইনপুট পাওয়া যায় না বা তারা কোয়েরিকে প্রভাবিত করতে পারে না তবে এটি আপনার বর্তমান উদাহরণে কোনও সমস্যা নয়।

তবে আমি যেমন এটি ব্যবহার করার সর্বোত্তম অনুশীলনের আগে বলেছিলাম এবং একবার এটি ব্যবহার শুরু করলে আপনি কখনই থামেন না, উদাহরণস্বরূপ আপনি এটির মতো ব্যবহার করতে পারেন:

global $wpdb;
$tablename = $wpdb->prefix . "my_custom_table";
$sql = $wpdb->prepare( "SELECT * FROM %s ORDER BY date_created DESC",$tablename );
$results = $wpdb->get_results( $sql , ARRAY_A );

এটি কীভাবে কোডেক্সের দিকে যায় সে সম্পর্কে আরও পড়তে হবে


হাই @ বেনটারনেট, এই জাতীয় স্পষ্ট ব্যাখ্যার জন্য ধন্যবাদ - কোনও কারণে যখন আমি আপনার কোডটি চেষ্টা করি তখন এটি একটি খালি অ্যারে দেয়। টাইপসের জন্য আমি পরীক্ষা করে দেখেছি এবং দ্বিগুণ করেছি। আমি যদি অপ্রস্তুত কোয়েরি করি তবে অ্যারেটি পাই। বুঝতে পারছি না কেন এটা কাজ করছে না ..!
রিচার্ড সুইনি

বিজোড়। আমি অন্য প্রশ্নের সাথে একই কোডটি ব্যবহার করার চেষ্টা করেছি: $tablename = $wpdb->prefix . "my_custom_table"; $concert_id = 1; $sql = "SELECT * FROM " . $tablename . " WHERE concert_id = %d LIMIT 1;"; $prep_sql = $wpdb->prepare( $sql, $concert_id ); $get_concerts = $wpdb->get_results( $prep_sql , ARRAY_A ); এবং এটি দুর্দান্ত কাজ করে! কেন হবে তা নিশ্চিত নয়। তবে আমি এখন তা কোনও অবস্থাতেই পেয়েছি!
রিচার্ড সুইনি

6
আবদ্ধ সারণী নাম মধ্যে একক উদ্ধৃতি কাজ করবে না। স্বাভাবিক পলায়নের, ব্যাকটিক সাথে আছেন তাই আপনার প্রশ্নের সাথে শেষ পর্যন্ত, যেমন এই রকম খুঁজছেন: SELECT * FROM `wp_my_custom_table`। আপনি ডাবল উদ্ধৃতি সমর্থন সক্রিয় করতে পারেন, কিন্তু তারপর এটা ভালো চেহারা করতে হবে: SELECT * FROM "wp_my_custom_table"
জান ফ্যাব্রি

3
আমি এই উত্তরের সাথে একমত নই ফাংশন ইতিমধ্যে সবকিছু থেকে পালিয়ে গেলে কেন আপনার পালানো উচিত? আপনি কি মনে করেন ওয়ার্ডপ্রেস মূল থেকে অব্যাহতি সরিয়ে নেওয়ার সিদ্ধান্ত নেবে? এছাড়াও টেবিলের নাম এড়ানোর কোনও অর্থ নেই :) কারণ এটি হার্ডকোডযুক্ত এবং আপনি জানেন যে এটি ঠিক আছে। আমি এটিকে কেবল উদাহরণ হিসাবে জানি তবে যাইহোক টেবিলের নামগুলি এড়ায় না, টেবিলের নামগুলির সাথে প্রস্তুত করার সময় এটি ব্যাকটিক্স এবং এসকিউএল ট্রোর ত্রুটি যুক্ত করে আমার সমস্যা হয়।
টমমিকসফট

@ টমমিক্সফ্ট আপনি যদি উত্তরটি আবারও পড়েন তবে আপনি দেখতে পাবেন যে আমি আসলে যা বলেছি ঠিক তেমনটাই বলেছেন এবং টেবিলের নাম এটি একটি উদাহরণ।
বাইনারনেট

0

আপনি যখন প্রস্তুত ব্যবহার করেন এটি কোডটি এসকিউএল ইঞ্জেকশন দুর্বলতা থেকে রক্ষা করে।

এখানে ব্যবহারের জন্য আপনার কোডটি সংশোধন করতে হবে prepare();

global $wpdb;
$tablename = $wpdb->prefix . "my_custom_table";
$sql = $wpdb->prepare( "SELECT * FROM {$tablename} ORDER BY date_created DESC");
$resulst = $wpdb->get_results( $sql , ARRAY_A );

0

আপনার ক্ষেত্রে এসকিউএল ইঞ্জেকশন আক্রমণ সম্ভব নয় । আপনার কোডে অতিরিক্ত সুরক্ষার প্রয়োজন নেই কারণ ব্যবহারকারীর ইনপুট যেমন ব্যবহার করেন না: পোস্ট করুন, পান, অনুরোধ করুন, কুকি করুন।

সার্ভার সংস্থানগুলি সংরক্ষণ করার জন্য যখন প্রয়োজন হয় না তখন জটিল ক্রিয়াকলাপটি ব্যবহার করবেন না।

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