সর্বশেষ সম্পাদনা করেছেন সাইফুল_বিডি (১৮-০৩-২০১৩ ১৩:১১)

টপিকঃ পিএইচপি + MySQL টিপস শেয়ার করুন

প্রথমটা আমি শেয়ার করি।
পিএইচপি ও মাইস্কুল এ টেবিল বানানো ( বাংলা , আরবি , ইংরেজি ... মানে UTF-8 এনকোডিং এর সব সাপোর্ট করবে)

$sql = "CREATE TABLE tale_name
(
id int NOT NULL AUTO_INCREMENT, 
PRIMARY KEY(id),
bangla text,
arabic text,
english text
) DEFAULT CHARACTER SET utf8   
 COLLATE  utf8_unicode_ci ";

ডিফল্ট ক্যারেকটার সেট UTF-8 হওয়ার কারনে ক্যারেক্টার এনকোডিং এ কোনো সমস্যা হবে না।

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

Re: পিএইচপি + MySQL টিপস শেয়ার করুন

    try {
        $pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');
        
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        
        $pdo->exec('SET NAMES "utf8"');
    } catch(PDOException $e) {
        $error = 'Unable to connect to the database server.';
        // $error = 'Unable to connect to the database server: ' . $e->getMessage();
        
        include 'error.html.php';
        
        exit();
    }

এখন এই $pdo অবজেক্ট দিয়ে সব ধরণের ক্যুয়েরি করি। এসকিউএল ইঞ্জেকশন থেকে নিরাপদে থাকার জন্য প্রিপেয়ার্ড স্টেইটমেন্ট ব্যবহার করি।

আর ডেটাবেইসে টেবিল তৈরী করি নিচের মত।

CREATE TABLE roles(
    role_id INT PRIMARY KEY AUTO_INCREMENT,
    type VARCHAR(32) NOT NULL,
    description VARCHAR(128)
) DEFAULT CHARACTER SET "utf8" ENGINE = InnoDB;

লেখাটি CC by-nc-sa 3.0 এর অধীনে প্রকাশিত

সর্বশেষ সম্পাদনা করেছেন সাইফুল_বিডি (১৮-০৩-২০১৩ ১৩:৪০)

Re: পিএইচপি + MySQL টিপস শেয়ার করুন

$str=mysql_real_escape_string($str);    এটা ব্যবহার করি সিকুয়েন ইঞ্জেকশন থেকে নিরাপদ থাকতে। PDO কোনোদিন ব্যবহার করিনাই।অনেকেই দেখেছি হেক্সা ইনপুট দেয় ইঞ্জেকশন এর সময় , সেটা বাইপাস হয় কিনা শিঊর না sad
উদাহরনঃ

https://apps.facebook.com/hola_life/use … ogin_id%2C0x3a%2Clogin_pwd%29*%2F%2C4%2C5+from+user
link

http://fakeconvos.com/view.php?id=-5417 … ,location,0x3a,gender,0x3a,time,0x3a,id,0x3a,fbid,0x3a,email,0x3a,name,0x3a,location,0x3a,gender%29,3,4,5,6,7,8,9,10,11,12+from+users--
link

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

Re: পিএইচপি + MySQL টিপস শেয়ার করুন

আমার মতে, কলামের নামে টেবিলের নাম যোগ না করাই ভাল। তাতে রিডান্ডেন্সি কমে। roles(role_id, type, description)  না দিয়ে roles(id, type, description) দিলেই ভাল। roles টেবিলে যা কলাম আছে সব তো roles এরই। আলাদা করে role উল্লেখ করার প্রয়োজন নেই। ব্যাপারটা অনেকটা এরকম, মানুষ নামে একটা টেবিল ডিফাইন করলাম। মানুষ (মানুষের_নাম, বয়স, উচ্চতা)। এখানে মানুষের_নাম তো মানুষের কোন প্রোপার্টি না। প্রপার্টিটা হল নাম। তাই এটা হবে মানুষ(নাম, বয়স, উচ্চতা)।

Feed থেকে ফোরাম সিগনেচার, imgsign.com
ব্লগ: shiplu.mokadd.im
মুখে তুলে কেউ খাইয়ে দেবে না। নিজের হাতেই সেটা করতে হবে।

শিপলু'এর ওয়েবসাইট

লেখাটি GPL v3 এর অধীনে প্রকাশিত

Re: পিএইচপি + MySQL টিপস শেয়ার করুন

সাইফুল_বিডি লিখেছেন:

$str=mysql_real_escape_string($str);    এটা ব্যবহার করি সিকুয়েন ইঞ্জেকশন থেকে নিরাপদ থাকতে।

হুমম . . . স্যানিটাইজ করা যেতে পারে। smile

আসলে সিকিউরিটি মন্ত্র অনুসরণ করলেই হল।

Filter Input, Escape Output

সাইফুল_বিডি লিখেছেন:

PDO কোনোদিন ব্যবহার করিনাই।

সেটা কোন সমস্যা না। তবে mysql এক্সটেনশন ব্যবহার না করাই ভাল। কেন যদি জিজ্ঞেস করেন তাহলে এর ভাল উত্তর দিতে পারব না। শুধু এতটুকু বলতে পারি mysql এক্সটেনশনের ডেভেলপমেন্ট বন্ধ হয়ে গিয়েছে সেই ২০০২ সালে। ফলে মাইএসকিউএল ৪.০.০ – এর পরের নতুন ফিচারগুলোর সাপোর্ট নেই এটাতে। এখন ১০ বছর আগের প্রযুক্তি ব্যবহার করতে চাইলে সেটা করতে পারেন। কিংবা ইম্প্রুভড এক্সটেনশন ব্যবহার করতে পারেন। mysqli এক্সটেনশনের কথা বলছি।

সাইফুল_বিডি লিখেছেন:

অনেকেই দেখেছি হেক্সা ইনপুট দেয় ইঞ্জেকশন এর সময় , সেটা বাইপাস হয় কিনা শিঊর না sad

প্রিপেয়ার্ড স্টেইটমেন্টের বেলায় সেটা কোন সমস্যা করবে না। mysql_real_escape_string() – এর কথা জানা নেই। তবে আপনি যেই লিংকগুলো দিলেন ওগুলো আশা করছি হ্যান্ডেল করতে পারবে ফাংশনটা। smile বাই দ্যা ওয়ে, কোড ট্যাগের মধ্যে লিংক দুটো দিন।

লেখাটি CC by-nc-sa 3.0 এর অধীনে প্রকাশিত

Re: পিএইচপি + MySQL টিপস শেয়ার করুন

অয়ন খান লিখেছেন:

বাই দ্যা ওয়ে, কোড ট্যাগের মধ্যে লিংক দুটো দিন।

https://apps.facebook.com/hola_life/user.php?id=-680+/**/UNION+/*!select*/+1,2,concat/*!(login_id,0x3a,login_pwd)*/,4,5+from+user--
http://fakeconvos.com/view.php?id=-54171+UNION+SELECT+1,group_concat%28id,0x3a,fbid,0x3a,email,0x3a,name,0x3a,location,0x3a,gender,0x3a,time,0x3a,id,0x3a,fbid,0x3a,email,0x3a,name,0x3a,location,0x3a,gender%29,3,4,5,6,7,8,9,10,11,12+from+users--
এই ব্যাক্তির সকল লেখা কাল্পনিক , জীবিত অথবা মৃত কারো সাথে মিল পাওয়া গেলে তা সম্পুর্ন কাকতালীয়, যদি লেখা জীবিত অথবা মৃত কারো সাথে মিলে যায় তার দায় এই আইডির মালিক কোনক্রমেই বহন করবেন না। এই ব্যক্তির সকল লেখা পাগলের প্রলাপের ন্যায় এই লেখা কোন প্রকার মতপ্রকাশ অথবা রেফারেন্স হিসাবে ব্যবহার করা যাবে না।

Re: পিএইচপি + MySQL টিপস শেয়ার করুন

mysql_real_escape_string() পিএইচপির ভবিষ্যত ভার্শনগুলো থেকে বাদ দেবে, ৫.৫.০ তে এটা deprecated।

Re: পিএইচপি + MySQL টিপস শেয়ার করুন

জেলাল লিখেছেন:

mysql_real_escape_string() পিএইচপির ভবিষ্যত ভার্শনগুলো থেকে বাদ দেবে, ৫.৫.০ তে এটা deprecated।

এখনই অনেক যায়গায় সমস্যা করে !

এভাবে কোন ভ্যালিডেশন ছাড়া কিউরি করলে এপ vulnerable । সেক্ষেত্রে mysql_real_escape_string() ব্যবহার করেছি , এটা বাদ দিলে কি করব ? আর নতুন কোনো এস্কেপ ফাংশন আসবে কি ? নাকি ম্যনুয়াল ফাংশন ব্যবহার করতে হবে ?

$sql = "SELECT * FROM table WHERE id = '" . $_REQUEST['id'] . "'";

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

সর্বশেষ সম্পাদনা করেছেন invarbrass (১৮-০৩-২০১৩ ১৫:২৯)

Re: পিএইচপি + MySQL টিপস শেয়ার করুন

২০১৩ সালেও mysql_* ব্যবহার করছেন, আপনাকে তো ইনটারন্যাশনাল গ্র্যান্ডফাদারস জাদুঘর এ্যাওয়ার্ড দেয়া উচিৎ!  tongue
PDO-তে আপগ্রেড করুন - খুব বেশি হলে ১৫/২০ মিনিট লাগবে বেসিক এপিআইগুলো শিখতে, একবার PDO ব্যবহার শুরু করলে আর পুরণো মান্ধাতার আমলের এপিআই-তে ফিরে যাবেন না এটা নিশ্চিৎ!  big_smile
ইনপুট ভ্যালিডেশনের জন্য প্যারামিটারাইজড কুয়েরী ব্যবহার করুন। নিজ হাতে সিকুয়েল কুয়েরী না লিখতে চাইলে idiorm জাতীয় ফ্লুয়েন্ট কুয়েরী বিল্ডার ব্যবহার করতে পারেন। (ইডিঅর্ম ছাড়াও লেরাভেল, ফুয়েলপিএইচপি, ঈ, কোডইগ্নাইটার ইত্যাদি ফ্রেমওয়ার্কেও এ ধরণের কুয়েরী জেনারেট আছে - তবে বেশিরভাগই ফ্রেমওয়ার্ক ছাড়া কাজ করে না)

PHP সম্পর্কিত কিছু পুরণো থ্রেড:
http://forum.projanmo.com/topic11875.html
http://forum.projanmo.com/topic11447.html
http://forum.projanmo.com/topic11122.html
http://forum.projanmo.com/topic18343.html
http://forum.projanmo.com/topic14817.html

Calm... like a bomb.

১০

Re: পিএইচপি + MySQL টিপস শেয়ার করুন

function escape($string){
$st=array("0x3a","\\","%","_","'","from","order","UNION","SELECT","select","-","group","concat","!","*",",");
    $num=count($st);
    for ($i=0; $i < $num; $i++) 
    { 
        $string = str_replace($st[$i],'',$string);
    }
    $count=strlen($string);
    $x="";$o=0;
    for ($i=0; $i < $count; $i++)
    { 
        $x.=$string[$i];
        $o+=1;
        if($string[$i]==" "){return $x;break;}
        if($o==$count){return $x;break;}
    }
}

এইটা লিখলাম  , এসকিউএল এস্কেপ এর জন্য ।

ব্রাশু ভাই আমি কোথাও পিএইচপি শিখি নাই , তাই অত কিছুর ধারোনা নাই। পিএইচপি এর জন্য একটা ভালো বই রেফার করেন। দেখি পড়ে কিছু করা যায় কিনা।

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

১১

Re: পিএইচপি + MySQL টিপস শেয়ার করুন

লেখাটি CC by-nc-sa 3.0 এর অধীনে প্রকাশিত

১২ সর্বশেষ সম্পাদনা করেছেন invarbrass (১৮-০৩-২০১৩ ১৭:২৬)

Re: পিএইচপি + MySQL টিপস শেয়ার করুন

সাইফুল_বিডি লিখেছেন:

ব্রাশু ভাই আমি কোথাও পিএইচপি শিখি নাই , তাই অত কিছুর ধারোনা নাই। পিএইচপি এর জন্য একটা ভালো বই রেফার করেন। দেখি পড়ে কিছু করা যায় কিনা।

কয়েক বছর আগে হলে এই বইটা রেকমেন্ড করতাম। চমৎকার বই! তবে আউটডেটেড হয়ে গেছে। পিএইচপি ৫.৩/৫.৪-এর যুগে বইটার বড় অংশ বোধহয় অকেজো... তবে বিগিনারদের জন্য ভালো।

ইন্টারমিডিয়েট লেভেলের প্রোগ্রামারদের জন্য এটা, এটা এবং এটা দেখতে পারেন।

এছাড়া, Beginning PHP and MySQL E Commerce ভালো লেগেছিলো - পুরো বইটাতে একটা বড় ইকমার্স সাইট প্রযেক্ট তৈরী করে (একই বইয়ের এএসপি.নেট এবং পোস্টগ্রেস ভার্সনও আছে  lol - এক ঢিলে ৩ পাখি মেরেছে লেখক)। এই বইটাও মোটামুটি আউটডেটেড হয়ে গেছে - তবে এটাতে পিএইচপি ছাড়াও এমভিসি (মডেল-ভিউ-কন্ট্রোলার), এন-টিয়ার আর্কিটেকচার ইত্যাদি এন্টারপ্রাইয ডেভেলপমেন্ট টপিক নিয়ে আলোচনা করেছে। পিএইচপির জন্য বোধহয় OOP, enterprise development design patterns, Unit-testing ইত্যাদি বিষয়ে তেমন ভালো বই নেই। sad জাভা/সি++/সি#-এর জন্য এসব বিষয়ে বেশ কিছু চমৎকার বই আছে।

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

Calm... like a bomb.

১৩

Re: পিএইচপি + MySQL টিপস শেয়ার করুন

সাইফুল_বিডি লিখেছেন:

প্রথমটা আমি শেয়ার করি।
পিএইচপি ও মাইস্কুল এ টেবিল বানানো ( বাংলা , আরবি , ইংরেজি ... মানে UTF-8 এনকোডিং এর সব সাপোর্ট করবে)

হুম। ডাটাবেজ তৈরী করার পরই এনকোডিং-কোলেশন ঠিক করে নিলে ঝামেলা শেষ। উল্টাবাল্টা এনকোডিং এ ডাটা ইনসার্ট করে ফেললে বিশাল গ্যাঞ্জামে পরতে হয় পরে। sad

mysqli এর চেয়ে PDO ব্যবহার করা ভালো। ডাটাবেজ ইঞ্জিন সুইচ করা ইজি। আর প্রিপেয়ার্ড স্টেটমেন্টও খুব কাজের।

//INSERT
$stmt->exec(array("value1","value2"..........));

একাধিক ডাটা ইনসার্টের জন্য এই syntax খুবই হেল্পফুল।


সাইফুল_বিডি লিখেছেন:

সেক্ষেত্রে mysql_real_escape_string() ব্যবহার করেছি , এটা বাদ দিলে কি করব ? আর নতুন কোনো এস্কেপ ফাংশন আসবে কি ? নাকি ম্যনুয়াল ফাংশন ব্যবহার করতে হবে ?

mysqli তে এটার ইকুভ্যালেন্ট হচ্ছে mysqli_real_escape_string , $db->real_escape_string ইত্যাদি।

invarbrass লিখেছেন:

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

ফ্রেমওয়ার্ক কোনটা বেশি ব্যবহার করেন ? লাভারেল থুক্কু লারাভেল ৪ নিয়ে বেশ ক্রেজ দেখতে পাচ্ছি আশেপাশে।

সারিম'এর ওয়েবসাইট

লেখাটি CC by-nc-sa 3.0 এর অধীনে প্রকাশিত

১৪ সর্বশেষ সম্পাদনা করেছেন invarbrass (১৮-০৩-২০১৩ ২১:১৪)

Re: পিএইচপি + MySQL টিপস শেয়ার করুন

সারিম লিখেছেন:
invarbrass লিখেছেন:

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

ফ্রেমওয়ার্ক কোনটা বেশি ব্যবহার করেন ? লাভারেল থুক্কু লারাভেল ৪ নিয়ে বেশ ক্রেজ দেখতে পাচ্ছি আশেপাশে।

Yii নিয়ে নাড়াচাড়া করেছিলাম বেশ কয়েকমাস - সলিড ফ্রেমওয়ার্ক, পার্ফর্ম্যান্স ভাল, তবে কেন যেন এইটার প্রোগ্রামিং স্টাইল তেমন পছন্দ হয় নাই।

L4 মূলত: কপিপেস্ট ফ্রেমওয়ার্ক - রেইলসের মোটামুটি সরাসরি পিএইচপি ক্লোন। ল্যারাভেল নিয়ে ক্রেজ হবার কারণ এটার হাইপ-মেশিনের বড় গলা। ওদের ওয়েবসাইটে সব বোম্বাস্টিক দাবী - ডকুমেন্টেশন সাধারণ এমন আহামরি কিছু না, কিন্তু লিখে রেকেছে "ইনক্রেডিবলী ওয়েল ডকুমেনটেড"। রূবী থেকে মোটামুটি বেশিরভাগ ফীচার কপিপেস্ট মেরেছে, আবার বড়গলায় বলে এলোকুয়েন্ট নাকি "মোস্ট কমপ্লিট এ্যাকটিভরেকর্ড ইমপ্লিমেন্টেশন ইন পিএইচপি"। হাইপারবোল ছাড়াও লেরাভেলের পেছনে tutsplus-এর (জেফরী ওয়ে) বড় ব্যাকিং আছে। এরা প্রায় সময়ই লেরাভেল নিয়ে টিউটো/আর্টিকল লেখে (আমাকেও একখানা লিখতে প্রস্তাব দিয়েছিলো  tongue )

ফুয়েলপিএইচপি এবং ল্যারাভেল দু'টাই একই সময় এবং একই সোর্স (কোহানা/কোডইগ্নাইটারের পিএইচপি ৫.৩ রিরাইট) থেকে জন্ম নিয়েছিলো - তবে ল্যারাভেল মাঝপথে পাল্টি মেরে RoR ক্লোন করা শুরু করেছে। শুধু যে রেইলসের ফীচার/আইডিয়া কপি মারছে তাই না, অর্ধেকেরও বেশি ফ্রেমওয়ার্ক সিম্ফনী ২ কম্পোনেন্ট ব্যবহার করে। তবে সিম্ফনী বেজড হলেও সাইলেক্স-এর চাইতে সহজ (যেহেতু রেইলস স্টাইল ফলো করে  lol )

Calm... like a bomb.

১৫

Re: পিএইচপি + MySQL টিপস শেয়ার করুন

invarbrass লিখেছেন:

হাইপারবোল ছাড়াও লেরাভেলের পেছনে tutsplus-এর (জেফরী ওয়ে) বড় ব্যাকিং আছে। এরা প্রায় সময়ই লেরাভেল নিয়ে টিউটো/আর্টিকল লেখে (আমাকেও একখানা লিখতে প্রস্তাব দিয়েছিলো  tongue )

কাহিনী এতদূর! আমিতো কয়েকদিন পর পরই ল্যারাভেল নিয়ে ওদের টুইট দেখি!

লেখাটি CC by-nc-sa 3.0 এর অধীনে প্রকাশিত

১৬ সর্বশেষ সম্পাদনা করেছেন invarbrass (১৮-০৩-২০১৩ ২১:৩৬)

Re: পিএইচপি + MySQL টিপস শেয়ার করুন

অয়ন খান লিখেছেন:
invarbrass লিখেছেন:

হাইপারবোল ছাড়াও লেরাভেলের পেছনে tutsplus-এর (জেফরী ওয়ে) বড় ব্যাকিং আছে। এরা প্রায় সময়ই লেরাভেল নিয়ে টিউটো/আর্টিকল লেখে (আমাকেও একখানা লিখতে প্রস্তাব দিয়েছিলো  tongue )

কাহিনী এতদূর! আমিতো কয়েকদিন পর পরই ল্যারাভেল নিয়ে ওদের টুইট দেখি!

এখন মনে হয় আরো বেশি বেশি করে করবে  lol

টেকক্রান্চ-এর পেছনের লোকজন মেইলবক্সএ্যাপ-এর ইনভেস্টর ছিলো  wink

Calm... like a bomb.