কখনও কখনও আপনার মাইএসকিউএলআই কোডটি এর মতো mysqli_fetch_assoc() expects parameter...
, Call to a member function bind_param()...
বা অনুরূপ একটি ত্রুটি তৈরি করে । বা এমনকি কোনও ত্রুটি ছাড়াই, তবে ক্যোয়ারী সব একই কাজ করে না। এর অর্থ হল আপনার অনুসন্ধানটি কার্যকর করতে ব্যর্থ হয়েছে।
প্রতিবার কোনও প্রশ্ন ব্যর্থ হয়, মাইএসকিউএলে একটি ত্রুটি বার্তা থাকে যা কারণটি ব্যাখ্যা করে । দুর্ভাগ্যক্রমে, ডিফল্টরূপে এই জাতীয় ত্রুটিগুলি পিএইচপি-তে স্থানান্তরিত হয় না এবং আপনি যা পেয়েছেন তা উপরে উল্লিখিত একটি ক্রিপ্টিক ত্রুটি বার্তা। সুতরাং আপনার কাছে মাইএসকিউএল ত্রুটিগুলি জানাতে পিএইচপি এবং মাইএসকিউএলআইটি কনফিগার করা খুব গুরুত্বপূর্ণ। এবং একবার ত্রুটি বার্তাটি পেয়ে গেলে, এটি ঠিক করা কেকের একটি অংশ হবে।
MySQLi এ ত্রুটি বার্তাটি কীভাবে পাবেন?
প্রথমত, মাইএসকিউএলআই আপনার সমস্ত পরিবেশে সংযুক্ত হওয়ার আগে সর্বদা এই লাইনটি রাখুন :
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
এর পরে সমস্ত মাইএসকিউএল ত্রুটি পিএইচপি ব্যতিক্রমগুলিতে স্থানান্তরিত হবে। অপ্রকাশিত ব্যতিক্রম, পরিবর্তে, একটি পিএইচপি মারাত্মক ত্রুটি করে makes সুতরাং, কোনও মাইএসকিউএল ত্রুটির ক্ষেত্রে, আপনি একটি প্রচলিত পিএইচপি ত্রুটি পাবেন। এটি তাত্ক্ষণিকভাবে ত্রুটির কারণ সম্পর্কে আপনাকে সচেতন করবে। এবং একটি স্ট্যাক ট্রেস আপনাকে সঠিক জায়গায় নিয়ে যায় যেখানে ত্রুটিটি ঘটেছিল।
কীভাবে বিভিন্ন পরিবেশে পিএইচপি কনফিগার করতে হয়
এখানে পিএইচপি ত্রুটি প্রতিবেদন সম্পর্কিত আমার নিবন্ধটির একটি সংক্ষেপ :
একটি বিকাশ এবং লাইভ সার্ভারগুলিতে ত্রুটির প্রতিবেদন করা আলাদা হতে হবে। ডেভলপমেন্ট সার্ভারে স্ক্রিনটি অন স্ক্রিনে দেখানো সুবিধাজনক, তবে লাইভ সার্ভারে ত্রুটি বার্তাগুলি অবশ্যই লগইন করা উচিত, যাতে আপনি পরে ত্রুটি লগ এ খুঁজে পেতে পারেন।
সুতরাং, আপনাকে অবশ্যই নিম্নলিখিত মানগুলির সাথে সম্পর্কিত কনফিগারেশন বিকল্পগুলি সেট করতে হবে:
একটি ডেভলপমেন্ট সার্ভারে
error_reporting
সেট করা উচিত E_ALL
মান ;
log_errors
1 এ সেট করা উচিত (এটি একটি ডেভেলপমেন্ট পিসিতে লগ থাকা সুবিধাজনক)
display_errors
1 সেট করা উচিত
একটি প্রোডাকশন সার্ভারে
error_reporting
E_ALL
মান সেট করা উচিত ;
log_errors
1 সেট করা উচিত
display_errors
0 এ সেট করা উচিত
আসলে এটি কীভাবে ব্যবহার করবেন?
কেবল যে কোনো কোডটি সরাতে যে ত্রুটির জন্য চেক ম্যানুয়ালি , সমস্ত or die()
, if ($result)
এবং এই ধরনের। সরাসরি আপনার ডাটাবেস মিথস্ক্রিয়া কোড লিখুন:
$stmt = $this->con->prepare("INSERT INTO table(name, quantity) VALUES (?,?)");
$stmt->bind_param("si", $name, $quantity);
$stmt->execute();
আবার, আশেপাশে কোনও শর্ত ছাড়াই । যদি কোনও ত্রুটি দেখা দেয় তবে এটি আপনার কোডের অন্য কোনও ত্রুটি হিসাবে বিবেচিত হবে। উদাহরণস্বরূপ, একটি ডেভলপমেন্ট পিসিতে এটি কেবলমাত্র অন স্ক্রিনে উপস্থিত হবে, যখন কোনও লাইভ সাইটে এটি কোনও প্রোগ্রামারের জন্য লগ করা হবে, তবে ব্যবহারকারীর সুবিধার্থে আপনি একটি ত্রুটি হ্যান্ডলার ব্যবহার করতে পারেন (তবে এটি ভিন্ন গল্প যা বিষয়বস্তু থেকে দূরে রয়েছে) মাইএসকিউলি, তবে আপনি এটি উপরে লিঙ্কিত নিবন্ধে পড়তে পারেন)।
আপনি যে ত্রুটি বার্তাটি পান সেটি কী করবেন?
সবার আগে আপনাকে সমস্যার প্রশ্নটি সনাক্ত করতে হবে। ত্রুটি বার্তায় ফাইলের নাম এবং ত্রুটিটি হয়েছিল যেখানে সঠিক স্থানের লাইন নম্বর রয়েছে। সহজ কোডের জন্য এটি যথেষ্ট, তবে যদি আপনার কোডটি ফাংশন বা ক্লাস ব্যবহার করে থাকে তবে সমস্যার ক্যোয়ারী সনাক্ত করতে আপনার স্ট্যাক ট্রেস অনুসরণ করতে হবে ।
ত্রুটির বার্তা পাওয়ার পরে, আপনাকে এটি পড়তে হবে এবং বুঝতে হবে। এটি অত্যন্ত সুস্পষ্ট মনে হয় তবে তা তাত্পর্যপূর্ণ নয়, তবে শিখররা প্রায়শই এই ত্রুটিটি বার্তা দেয় যে ত্রুটি বার্তাটি কেবল একটি অ্যালার্ম সিগন্যাল নয়, তবে এটি আসলে সমস্যার বিস্তারিত ব্যাখ্যা ধারণ করে । এবং আপনার যা দরকার তা হ'ল ত্রুটি বার্তাটি পড়া এবং সমস্যাটি ঠিক করা।
- বলুন, যদি এটি বলে যে কোনও নির্দিষ্ট টেবিলের অস্তিত্ব নেই, আপনাকে বানান, টাইপস, লেটার কেস পরীক্ষা করতে হবে। আপনার পিএইচপি স্ক্রিপ্ট একটি সঠিক ডাটাবেসের সাথে সংযোগ স্থাপন করেছে তাও আপনাকে নিশ্চিত করতে হবে
- অথবা, যদি এটি বলে যে এসকিউএল সিন্ট্যাক্সে কোনও ত্রুটি রয়েছে তবে আপনাকে আপনার এসকিউএল পরীক্ষা করতে হবে। এবং ত্রুটি বার্তায় কোয়েরি অংশটি উদ্ধৃত করার আগে সমস্যা স্পটটি ঠিক ।
আপনি যদি ত্রুটি বার্তাটি বুঝতে না পারেন তবে এটি গুগলে চেষ্টা করুন। এবং ফলাফলগুলি ব্রাউজ করার সময়, এমন উত্তরগুলিতে আটকে থাকুন যেগুলি ত্রুটিপূর্ণভাবে সমাধান দেওয়ার চেয়ে ত্রুটি ব্যাখ্যা করে। কোনও সমাধান আপনার বিশেষ ক্ষেত্রে কার্যকর নাও হতে পারে তবে ব্যাখ্যা আপনাকে সমস্যাটি বুঝতে এবং আপনাকে নিজেরাই সমস্যার সমাধান করতে সক্ষম করবে।
আপনি ত্রুটি বার্তা বিশ্বাস করতে হবে। যদি এটা বলে টোকেন যে সংখ্যা তারপর আবদ্ধ ভেরিয়েবল সংখ্যা মিলছে না এটা হয় তাই। অনুপস্থিত টেবিল বা কলামগুলির জন্য একই। পছন্দটি দেওয়া হোক না কেন এটি আপনার নিজের ভুল বা ত্রুটির বার্তাটি ভুল, সর্বদা পূর্বের সাথে লেগে থাকুন। আবার এটি সংশ্লেষজনক মনে হচ্ছে, তবে এই খুব সাইটেই শত শত প্রশ্ন এই পরামর্শটিকে অত্যন্ত কার্যকর প্রমাণ করে।
ত্রুটি প্রতিবেদন করার ক্ষেত্রে আপনার কখনই করা উচিত নয় এমন একটি তালিকা
- কখনও ত্রুটি দমন অপারেটর (
@
) ব্যবহার করবেন না! এটি একটি প্রোগ্রামারকে ত্রুটি বার্তাটি পড়তে অক্ষম করে এবং তাই ত্রুটিটি ঠিক করতে অক্ষম করে
- ব্যবহার করবেন না
die()
বা echo
বা অন্য কোন ফাংশন নিঃশর্তভাবে পর্দায় ত্রুটি বার্তা প্রিন্ট করতে। পিএইচপি নিজে থেকেই ত্রুটিগুলি প্রতিবেদন করতে পারে এবং এটি পরিবেশের উপর নির্ভর করে সঠিক উপায়ে করতে পারে - সুতরাং কেবল এটি পিএইচপি-র জন্য রেখে দিন।
- ম্যানুয়ালি (যেমন
if($result)
) ক্যোয়ারী ফলাফল পরীক্ষা করার জন্য একটি শর্ত যুক্ত করবেন না । ত্রুটি ব্যতিক্রম সক্ষম থাকলে এই শর্তটি কেবল অকেজো হবে।
try..catch
ত্রুটি বার্তা প্রতিধ্বনি করার জন্য অপারেটর ব্যবহার করবেন না । এই অপারেটরটি কোনও ট্রানজেকশন রোলব্যাকের মতো কিছু ত্রুটি পরিচালনার জন্য ব্যবহার করা উচিত। তবে কখনই এটি ত্রুটিগুলি রিপোর্ট করতে ব্যবহার করবেন না - যেমন আমরা উপরে শিখেছি, পিএইচপি ইতিমধ্যে এটি সঠিকভাবে করতে পারে।
পিএস
কখনও কখনও কোনও ত্রুটি হয় তবে ফলাফলও হয় না। তারপরে এর অর্থ, আপনার মানদণ্ডের সাথে মেলে ডাটাবেসে কোনও ডেটা নেই । এই ক্ষেত্রে আপনাকে এই সত্যটি স্বীকার করতে হবে, এমনকি যদি আপনি ডেটা এবং মানদণ্ডগুলি ঠিকঠাক করতে পারেন তবেও। তারা না. আপনাকে সেগুলি আবার চেক করতে হবে। আমি একটি নিবন্ধ পেয়েছি যা এই বিষয়ে সহায়তা করতে পারে, ডাটাবেস ইন্টারঅ্যাকশনগুলি কীভাবে ডিবাগ করা যায় । যদিও এটি পিডিওর জন্য লেখা, তবে নীতিটি একই is কেবলমাত্র এই নির্দেশিকাটি ধাপে ধাপে অনুসরণ করুন এবং হয় আপনার সমস্যার সমাধান হয়েছে বা স্ট্যাক ওভারফ্লোয়ের জন্য একটি উত্তরযোগ্য প্রশ্ন রয়েছে।
$mysqli
পরিবর্তনশীল সূচনা করছেন ?