টপিকঃ PDO টিউটোরিয়াল (MySQL)

ডাটাবেস কানেক্ট ও সিলেক্ট করাঃ

<?php $db = new PDO('mysql:host=localhost;dbname=testdb;charset=utf8', 'username', 'password'); ?>

সিম্পল সিলেক্টঃ

<?php
foreach($db->query('SELECT * FROM table') as $row) {
    echo $row['field1'].' '.$row['field2']; //etc...
}
?>

রো নাম্বার জানাঃ

<?php
$stmt = $db->query('SELECT * FROM table');
$row_count = $stmt->rowCount();
echo $row_count.' rows selected';
?>

লাস্ট ইন্সারট আইডি জানাঃ

<?php
$result = $db->exec("INSERT INTO table(firstname, lastname) VAULES('John', 'Doe')");
$insertId = $db->lastInsertId();
?>

INSERT, UPDATE, or DELETE স্টেটমেন্টঃ

<?php
$affected_rows = $db->exec("UPDATE table SET field='value'");
echo $affected_rows.' were affected'
?>

প্রিপেয়ারড কিউরির ব্যাপারটা বুঝিনাই তাই দেইনাই।

সুত্রঃhttp://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers

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

সর্বশেষ সম্পাদনা করেছেন হৃদয়১ (১৩-০৬-২০১৩ ১৩:৪০)

Re: PDO টিউটোরিয়াল (MySQL)

শেয়ার করার জন্য ধন্যবাদ।

OOP ব্যবহৃত হওয়ার এটা সুবিধাজনক। অনেক আলাদা আলাদা ফাংশনের প্রয়োজন হয়না। php এর array() সম্পর্কিত অতগুলো ফাংশনকেও একটা ক্লাসে ফেলে দিলে অনেক সুবিধা হত।

CI তেও এরকম OOP ক্লাস আছে। php ঘাঁটাঘাঁটি করলে তখন ডেটাবেস সংক্রান্ত কাজে ওটাই ব্যবহার করি।

তবে পাইথনে অনেক সুন্দর ORM আছে। php তে তেমন কিছু পেলে সরাসরি sql লেখা অ্যাভয়েড করা যেতো।

"No ship should go down without her captain."

হৃদয়১'এর ওয়েবসাইট

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

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

Re: PDO টিউটোরিয়াল (MySQL)

@হৃদয়দা, এলোকুয়েণ্ট এমার্জিং  tongue

$result = $db->exec("INSERT INTO table(firstname, lastname) VAULES('John', 'Doe')");

@সাইফুল - আপনি পুরণো আনসিকিউরভাবে কুয়রী তৈরী করছেন। এভাবে করলে ইনজেকশন দ্বারা হ্যাকড হবার সম্ভবনা ১০১% গ্যারাণ্টীড  cool
প্যারামিটারাইজড কুয়েরী ব্যবহার করুন।

Calm... like a bomb.

Re: PDO টিউটোরিয়াল (MySQL)

আমি যে কবে এসব নিয়ে কথা বলতে পারবো!

আমার সকল টপিক

কোনো কিছু বলার নেই আজ আর...

Re: PDO টিউটোরিয়াল (MySQL)

হৃদয়১ লিখেছেন:

php তে তেমন কিছু পেলে সরাসরি sql লেখা অ্যাভয়েড করা যেতো।

পিএইচপিতেও অনেক ORM আছে।
গুগলে ORM Library PHP দিয়ে সার্চ করলে প্রথম রেজাল্ট আসে স্ট্যাকওভারফ্লোর একটি পেজ।
http://stackoverflow.com/questions/1086 … rm-library

আমি ছোট খাট (মানে মোট ৪-৫ কুয়েরির প্রজেক্ট) কিছু হলে রেডবিন ইউজ করি।

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

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

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

Re: PDO টিউটোরিয়াল (MySQL)

invarbrass লিখেছেন:

@সাইফুল - আপনি পুরণো আনসিকিউরভাবে কুয়রী তৈরী করছেন। এভাবে করলে ইনজেকশন দ্বারা হ্যাকড হবার সম্ভবনা ১০১% গ্যারাণ্টীড  cool
প্যারামিটারাইজড কুয়েরী ব্যবহার করুন।

<?php
$stmt = $db->prepare("SELECT * FROM table WHERE id=? AND name=?");
$stmt->execute(array($id, $name));
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
?>

এভাবে ?

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

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

Re: PDO টিউটোরিয়াল (MySQL)

Slightly improvised code:

$stmt = $pdo->prepare('SELECT * FROM table WHERE id=:id AND name=:name');
$stmt->execute([':name' => $name, ':id' => $id]);
foreach ($stmt as $row) {
    //...
}
Calm... like a bomb.

Re: PDO টিউটোরিয়াল (MySQL)

পোস্টা করার জন্য ধন্যবাদ অনেক কিছু জানতে পারলাম মন্তব্য থেকে ।

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

Re: PDO টিউটোরিয়াল (MySQL)

আচ্ছা একটা কিউরি যে সাকসেস হয়েছে তা জানার পদ্দতি কি ?
আগেতো if(mysql_query("")){} এভাবে জানতাম।

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

১০

Re: PDO টিউটোরিয়াল (MySQL)

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

আচ্ছা একটা কিউরি যে সাকসেস হয়েছে তা জানার পদ্দতি কি ?
আগেতো if(mysql_query("")){} এভাবে জানতাম।

$stmt->execute(array($id, $name));

এভাবে হতে পারে,

$execution = $stmt->execute(array($id, $name));

if($execution)
{
//do something
}
else
{
//failure
}

১১

Re: PDO টিউটোরিয়াল (MySQL)

প্যারামিটারাইজড কুয়েরী সম্পর্কে একটু আলোচনা হলে ভালই হত। smile

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

Re: PDO টিউটোরিয়াল (MySQL)

$query = $db->prepare("INSERT INTO user (username, password, email, activation) VALUES (:username, :password, :email, :activation)");
        $query = execute([':username' => $username, ':password' => $password, ':email' => $email, ':activation' => $rnd]);
        $affected_rows = $query->rowCount();
        echo $affected_rows;
( ! ) Parse error: syntax error, unexpected '[', expecting ')' in C:\wamp\www\user\function.php on line 73
$query = $db->prepare("INSERT INTO user (username, password, email, activation) VALUES (:username, :password, :email, :activation)");
        $query = execute(array(':username' => $username, ':password' => $password, ':email' => $email, ':activation' => $rnd));
Fatal error: Call to undefined function execute() in C:\wamp\www\user\function.php on line 73

কি করি ?  hairpull

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

১৩

Re: PDO টিউটোরিয়াল (MySQL)

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

আচ্ছা একটা কিউরি যে সাকসেস হয়েছে তা জানার পদ্দতি কি ?

এক্সেপশন ক্যাচ করা যেতে পারে। আমি ওভাবেই করি। একটা প্রোজেক্ট থেকে কিছু কোড স্নিপেট (অবশ্যই হুবহু না) তুলে দিচ্ছি।

try {
    $pdo = new PDO('mysql:host=localhost;dbname=testdb', 'testusr', 'password');
    
    $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();
}

/* Validation Required */

$title = $_POST['title'];
$description = $_POST['description'];

try {
    $sql = "INSERT INTO reports SET
                title = :title,
                description = :description,
                user_id = {$_SESSION['user']['userId']};";
    
    $s = $pdo->prepare($sql);
    $s->bindValue(':title', $title);
    $s->bindValue(':description', $description);
    $s->execute();
} catch(PDOException $e) {
    $error = 'Error inserting a report.';
    // $error = 'Error inserting a report: ' . $e->getMessage();
    
    include 'error.html.php';
    
    exit();
}

$_SESSION['msg']['success'] = 'Successfully added.';

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

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

Re: PDO টিউটোরিয়াল (MySQL)

পোষ্টটি দেখে ভালই লাগলো। আমি যেভাবে কোড করি কিছুটা শেয়ার করলাম। প্যারামিটারাইজড কুয়েরীর পদ্ধতিতেই দেখানোর চেষ্টা করছিঃ

PDO ব্যবহার করে ডাটাবেজ কানেকশন করার কোডঃ

$dbhost = 'localhost';
$dbname = 'student';
$dbuser = 'root';
$dbpass = '';
try {
$pdo = new PDO("mysql:host={$dbhost};dbname={$dbname}", $dbuser, $dbpass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$conn = $pdo;
}
catch( PDOException $excepiton ) {
echo "Connection error :" . $excepiton->getMessage();
}

ডাটাবেজে ডাটা Insert করার কোডঃ

$statement = $pdo->prepare("INSERT INTO tbl_student (name,roll,age) VALUES (?,?,?)");
$statement->execute(array($st_name,$st_roll,$st_age));

ডাটাবেজের ডাটা Search করে আনার কোডঃ

$statement = $pdo->prepare("SELECT * FROM tbl_student WHERE id=?");
$statement->execute(array($st_id));
$result = $statement->fetchAll(PDO::FETCH_ASSOC);
foreach($result as $row)
{
echo $row['name'].'<br>';
echo $row['roll'].'<br>';
echo $row['age'].'<br>';
}

ডাটাবেজের ডাটা Update করার কোডঃ

$statement = $pdo->prepare("UPDATE arefin SET name=?, roll=? WHERE id=?");
$statement->execute(array($new_name,$new_roll,$st_id));

ডাটাবেজের ডাটা Delete করার কোডঃ

$statement = $pdo->prepare("DELETE FROM tbl_student");
$statement->execute();

কেউ কোন কোড বুঝতে না পারলে প্রশ্ন করতে পারেন। যথাসাধ্য উত্তর দেবার চেষ্টা করবো।

১৫

Re: PDO টিউটোরিয়াল (MySQL)

PDO তে টেবিল ক্রিয়েট করার কুয়েরিতে কোন সিস্টেমকি আছে কুয়েরী কাজ করেছে বুঝার জন্য ? আমি এরর ক্যাচ করে দেখেছি ০০০০০ এই জাতীয় একটা এরে থাকে টেবিল ক্রিয়েট হলে। আর না হলে ৩ নং এরেতে একটা টেবিল এক্সিস্ট অথবা এই জাতীয় মেসেজ পাওয়া যায়। কারো জানা মতে কোন পদ্ধতি আছে কি?

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