با فرض اینکه طبق پُستهای گذشته، اتصال PDO صحیح باشد، نحوهی عادی افزودن یک رکورد به جدول مربوطه در دیتابیس:
$sql = "INSERT INTO firsttable(name,family,phone,score) VALUES('Ehsan','Razavi','09120000000','93')";
$handler->query($sql);
اطلاعات ورودی میتوانند از فرم یا طُرق مختلف گرفته شوند که در مثال زیر هم حالت ساده و هم حالتی که از فرم گرفته شده را به صورت کامنت قرار دادهام:
$name = 'Ehsan';//$_POST['name']
$family = 'Razavi';//$_POST['family']
$phone = '09120000000';//$_POST['phone']
$score = '93';//$_POST['score']
$sql = "INSERT INTO firsttable(name,family,phone,score) VALUES('$name','$family','$phone','$score')";
$handler->query($sql);
اما روشهای فوق امن نیستند. برای اینکه کدهایمان را کمی امنتر کنیم، در مثال زیر اقدام به Bind کردن یا اصطلاحاً محدود کردن ورودیها میکنم:
$name = 'Ehsan';//$_POST['name']
$family = 'Razavi';//$_POST['family']
$phone = '09120000000';//$_POST['phone']
$score = '93';//$_POST['score']
$sql = "INSERT INTO firsttable(name,family,phone,score) VALUES(:name,:family,:phone,:score)";
$query = $handler->prepare($sql);
$query->execute([
':name' => $name,
':family' => $family,
':phone' => $phone,
':score' => $score
]);
در مثال فوق، برای Bind کردن علاوه بر قرار دادن : در قسمت ورودیهای دستور sql، از تابع prepare به جای تابع query استفاده کردم. ولی این به تنهایی کافی نیست و برای کامل بودن فرآیند Bind لازم است من مقادیری را به داخل کد sql وارد کنم تا Bind به درستی صورت گیرد. پس از تابع execute استفاده کردهام و مقادیر مورد نظرم را به صورت یک آرایه به کد sql خود پاس دادهام. (در این حالت چون از آرایه استفاده کردهام و کلید هر آرایه مشخص است، ترتیب مهم نخواهد بود و هر مقداری که پاس داده میشود به صورت صحیح در جای خود قرار میگیرد.)
اما در حالت و مثال زیر، ترتیب مقادیری که با تابع execute پاس میدهیم مهم خواهند بود، چون باید به درستی و به ترتیب در ? مربوطه قرار گیرند:
$name = 'Ehsan';//$_POST['name']
$family = 'Razavi';//$_POST['family']
$phone = '09120000000';//$_POST['phone']
$score = '93';//$_POST['score']
$sql = "INSERT INTO firsttable(name,family,phone,score) VALUES(?,?,?,?)";
$query = $handler->prepare($sql);
$query->execute([$name,$family,$phone,$score]);