مستوى الدرس :مبتدئ
بسم الله الرحمن الرحيم
عنوان الدرس : التوابع العالية في MySQL - الجزء الثالث
التابعان encode() و decode() :
قبل كل شيء يجب أن تعرف أن هذان التابعان يعملان مع بعضهما البعض, أي أن التابع encode() يقوم بالتشفير, و التابع decode() يفك التشفير.
يأخذ التابع encode(str , pass_str) وسيطين, الأول هو السلسلة المحرفية التي تريد تشفيرها (كلمة المرور), و الوسيط الثاني سلسلة محرفية أيضاً لترشد التابع encode() على كيفية التشفير, و طبعاً كلا الوسيطين اختياريين, و لتوضيح الأمر أنظر إلى سلسلة الاستعلامات التالية
select encode('khalil' , 'my pass');
select encode('khalil' , 'zoom');
select encode('khalil' , 'good');
ستكون نتيجة هذه الاستعلامات معقدة, و هي تشبه الصورة عندما تريد فتحها في محرر نصوص, أي أن التابع encode() يقوم بإنشاء كائناً ثنائياً (و ليس مثل التابعين password() , md5() اللذين يبنيان سلسلة نصية), لذلك فإن نوع العمود الذي سيحوي كلمات المرور المستخدمة مع التابع encode() سيكون من النوع text الذي يدعم الكائنات الثنائية و ليس من النوع char أو varchar اللذان يدعما السلاسل المحرفية.
التابع decode(crypt_str , passs_str) يأخذ وسيطين أيضاً, الأول هو اسم العمود الذي يحوي كلمات المرور المستخدمة مع التابع encode() , و الوسيط الثاني هو السلسلة المحرفية نفسها المستخدمة مع التابع encode() و التي قلنا عنها أنها ترشد التابع encode() على كيفية التشفير, سنأخذ هذا المثال لتوضيح كيفية عمل كلا التابعين:
أولاً: قم بإنشاء الجدول التالي
create table temp(
id int(3) not null primary key,
name varchar(15) not null,
login text not null ) ;
ثانياً: قم بإدراج سجل إلى هذا الجدول و لاحظ كيف يتم إدراج كلمة المرور الثنائية
insert into test_table values (1 , 'rasheed' , encode('tiger', 'pass'));
ثالثاً: قم بتشغيل الاستعلام التالي و شاهد النتيجة
select id , name from temp where decode(login, 'pass')='tiger' ;
و آخر دعوانا أن الحمد لله رب العالمين
أخوكم أبو عمر