درج کردن اطلاعات در MySQL با استفاده از MySQLi و PDO
بعد از اینکه پایگاه داده و جداول را ایجاد کردیم، حالا نوبت به درج اطلاعات می رسد.
دستور INSERT INTO برای درج کردن یک رکورد جدید در جدول استفاده می شود.
در اینجا چند قانون ساختاری وجود دارد که باید پیروی کنید:
- کوئری های SQL در PHP باید با علامت کوتیشن محصور شوند.
- مقادیر رشته ای استفاده شده در کوئری ها باید با علامت کوتیشن محصور شوند.
- اعداد را نباید با کوتیشن محصور کنید.
- کلمه NULL نباید با کوتیشن محصور شود.
به دو صورت می توان از دستور INSERT INTO استفاده کرد:
1- در این روش نیازی نیست که نام ستونها ذکر شود:
INSERT INTO table_name
VALUES (value1, value2, value3,...)
2- در این روش باید نام ستون ها و مقادیر متناظرشان ذکر شود:
INSERT INTO table_name (column1, column2, column3,...)
VALUES (value1, value2, value3,...)
برای کسب اطلاعات بیشتر در مورد SQL، به لینک روبرو مراجعه فرمایید: آموزش SQL-مقدمه
در مطلب قبل، یک جدول با نام "MyGuests" با 5 فیلد "id" و "firstname" و "lastname" و "email" و "reg_date" ایجاد کردیم، حالا اجازه دهید تا جدول را با اطلاعات پر کنیم.
![]() | توجه: اگر هنگام تعریف جدول، برای یک ستون، گزینه AUTO_INCREMENT را تنظیم کرده باشیم (مانند فیلد id) و یا فیلد مورد نظر از نوع TIMESTAMP باشد (مانند فیلد reg_date) هنگام درج اطلاعات نیازی به مشخص کردن مقدار نیست و MySQL بصورت اتوماتیک آنها را پر خواهد کرد. |
---|
مثال های زیر یک رکورد جدید به جدول "MyGuests" اضافه خواهند کرد:
مثال (MySQLi Object-oriented)
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe',
if ($conn->query($sql) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
$conn->close();
?>
مثال(MySQLi Procedural)
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
$sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe',
if (mysqli_query($conn, $sql)) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . mysqli_error($conn);
}
mysqli_close($conn);
?>
توجه: همانطور که قبلاً گفته شد در روش MySQLi Procedural برای اجرای کوئری ها، باید از تابع ()mysqli_query استفاده کرد، این تابع توسط Connectionی که برقرار شده برای ارسال کوئری به MySQL استفاده می شود.
مثال(PDO)
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDBPDO";
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
// set the PDO error mode to exception
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe',
// use exec() because no results are returned
$conn->exec($sql);
echo "New record created successfully";
}
catch(PDOException $e)
{
echo $sql . "<br>" . $e->getMessage();
}
$conn = null;
?>
برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHP کلیک کنید.
$sql = "INSERT INTO MyGuests ('username', 'password')
VALUES ('$username', '$password_md5')";
مشکل پیدا می کنم
دقیقا چه اروری رو میبینید بعد مقدار دادن
در ضمن کمی کد ها تون رو کامل تر بذارید تا بتونم راهنماییتون کنم
با تشکر
سؤال شما مشابه سؤال قبلی دوست عزیزمون هست که جواب دادم.
جواب سؤال قبلی، جواب شما هم هست.
اگر ابهامی بود، بفرمایید تا خدمتتون توضیح بدم.
الان من بخام داخل یک فرم این دستور رو بزارم باید چکار کنم؟جدول ایجاد کردیم و ارتباط هم ایجاد کردیم
بخام یک فرم ایجاد کردم از INSERT INTO چطوری باید استفاده کنم که مستقیم خودش ارسال کنه به پایگاه داده؟
زمانی که فرم ارسال میشه، با توجه به متد ارسال فرم مقادیر داخل یکی از آرایههای POST_$ یا GET_$ ریخته میشه. شما میتونید مقادیر مربوطه رو از داخل این ارایه گرفته و بعد از validate و پاکسازی مقادیر، اون رو داخل دیتابیس بریزید.
کد زیر یک مثال خیلی ساده است و فقط جاهایی که نیاز به توضیح شفاف داره به صورت کد هست. برخی از جاها فقط کامنت گذاشته شده است که گویاست باید چی کار کنید.
[dir=#555]<?php
if(count($_POST) > 0 && isset($_POST['btnSend'])){
$name = isset($_POST['txtName']) ? $_POST['txtName'] : '';
$family = isset($_POST['txtFamily']) ? $_POST['txtFamily'] : '';
$age = isset($_POST['txtAge']) ? $_POST['txtAge'] : '';
// validate inputs
// ...
if($name && $family && $age){
// connection to database
// ...
// select database
// ..
$query = "INSERT INTO tblUser (`name`, `family`, `age`) VALUES ('{$name}', '{$family}', '{$age}')";
$result = mysql_query($query);
}
}
?>
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet " href="style.css " type="text/css" />
<meta http-equiv="Con tent-Type" content="text/h tml; charset=iso-885 9-1" />
<title>Untitled Document</title>
</head>
<body>
<form method="post" action="">
<input type="text" name="txtName" />
<input type="text" name="txtFamily" />
<input type="text" name="txtAge" />
<input type="submit" name="btnSend" value="Send" />
</form>
</body>
</html>[/dir]
جدول فرضی tblUser هست که دارای 3 فیلد نام، نام خانوادگی و سن هست. دقت کنید مقادیر حتما باید قبل ریختن داخل دیتابیس اعتبارسنجی بشن، تا از تزریق کدهای خطرناک داخل دیتابیس جلوگیری بشه. من این کار رو تو کامنت مطرح کردم، با این دید که شما حتما انجامش خواهید داد.
از پاسخ "سریع" شما واقعا ممنون :) :D
والا این که کد رو دقیقا کجا بذارید رو باید خودتون مشخص کنید. چون شما برنامه رو نوشتید. من نمیدونم منطقش چیه که بگم کجا باید گذاشته بشه.
هر جا مقادیر رو گرفتید، همونجا آنالیزش کنید و بعد از اعتبارسنجی رکورد رو بسازید.
اما برای اینکه متوجه بشید رکوردی ساخته شده یا نه، بعد از اجرای کوئری و ایجاد رکورد، دستور ;()mysql_affected_rows رو اجرا کنید. این دستور به شما تعداد رکوردهایی که دستخوش تغییرات بودند رو بر میگردونه. در اینجا چون یک رکورد دستخوش تغییر (ایجاد) شده به شما مقدار یک رو خواهد داد.
مقدار صفر در اجرای این دستور یعنی اینکه عملیاتی در دیتابیس روی رکوردها انجام نشده.
خودم امتحان کردم شد چون ارور ها زیاده این کار را میکنم و بهتون زحمت میدم چون اینجا پیست میکنم ارسال نمیشه [dir=#555]
( ! ) Warning: mysqli_connect(): (HY000/2002): No connection could be made because the target machine actively refused it. in C:\wamp64\www\person.php on line 2
Call Stack
#
Time
Memory
Function
Location
1
0.0006
238112
{main}( )
...\person.php:0
2
0.0007
238496
mysqli_connect ( )
...\person.php:2
Failed to connect to MySQL: No connection could be made because the target machine actively refused it.
( ! ) Notice: Undefined index: NAME in C:\wamp64\www\person.php on line 7
Call Stack[/dir]
این یک بخشش هست ولی تمامی ارور ها همینه
متأسفانه من امکان اجرای کدهای شما رو ندارم. برای راهنمایی بهتره، متن خطا رو بفرستید. متن خطا رو ببینم، متوجه میشم مشکل از کجاست.
http://up.persianscript.ir/uploads2/e419-person.zip
کوئری رو یه مقدار بد نوشتید. بهتره عبارت رو داخل کوتیشن و فیلدهای رو داخل ` بذارید.
این رو امتحان کنید:
[dir=#555]$sql="INSERT INTO incom (`Name`, `email`, `website`, `gender`) VALUES ('{$_POST['NAME']}','{$_POST['email']}','{$_POST['website']}','{$_POST['gender']}')"; [/dir]
کدی در اینجا نیومده!
همینطور برای راهنمایی بهتر در صورت امکان متن خطایی که به شما میده رو هم بذارید. زمانی که یک کوئری به هر دلیل با موفقیت اجرا نیشه، یه خطا بر میگردونه. این خطا رو میتونید با دستور ()mysql_error نمایش بدید.