‎‎افزايش اطلاعات درجدول(SQL insert )

Previous >    <Next  

‎در دوبخش قبلي، ديتابسmydbوجدولmyGuests درآن ديتابيس ايجادشد. جدول فوق داراي ‎پنخ فيلد بنامهاي زيرميباشد.

‎id, firstname, lastname,email، reg_date

‎فيلدidازنوع افزايشي است ونيارباعلام مقدارندارد. فيلدreg_date هم مقدار پيش فرض دارد. ‎اگراعلام نشود، پيش فرض آن درج ميگردد.

‎افزايش سطراطاعات درجدول ، دستوراسكيوالinsert است، که بايد مطابق فرمت ‎سيستم بانك اطلاعاتي ‎ودر محيط مورد نظر اجرا شود. دراينجا سيستم بانک اطلاعاتيmysql ومحيط اجرا php ميباشد . ‎دستور فوق براي سيستمهاي اطلاعاتي يکسان بوده وفرمت اسکيوال اساندارد ميباشد. فرمت دستور ‎مطابق زيراست.

insert into tablename (col1,col2,col3,...) valuse(value1,value2,value3,...)

‎در قسمت اول دستور نام فيلدها ودرقسمتvaluseبه ترتيب مقاديرآن قرارميگيرد. نحوي اعلام ‎مقادير مطابق زيراست.

  1. ‎‎مقاديرکراکتري درداخل کتيش
  2. ‎‎مقدار فيلدtimesanp درداخل کوتيشن
  3. ‎‎‎مقدارnull بدون كوتيشن
  4. ‎‎مقدار عددي بدون کوتيشن

‎دراين بخش هم مشابه بخش قبلي براي افزايش اطلاعات درphp ارروش mysqli شيگرا ‎استفاده ميشود.

‎‎مثال ـ افزايش يک رديف اطلاعات

‎دستورinsert مثال شامل سه فيلدfirstname,lastname,email ميباشدكه مقدارآنها مشخص شده است. ‎اما دو فيلدidوreg_datte مطابق توضيحات فبلي مقاديرشان راmysql ثبت مي نمايد. عملکرد مابقي ‎اجزاء ارتباط ، مشابه بخش قبلي است.دستورinsert مطابق جدول زيراست .

$sql = "INSERT INTO MyGuests (firstname, lastname, email)  
VALUES  ('John', 'Doe', 'john@example.com')";

‎‎برنامه مثال مربوطه مطابق زيراست.

  <?php 
$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', 'john@example.com')";

if  ($conn->query($sql) === TRUE) {
  echo "New record created successfully";
} else {
  echo "Error: " . $sql . "<br>" . $conn->error;
}

$conn->close();
?> 

‎دراجراي مثال فوق يک رديف يارکورد به جدول اضافه ميشود. درصورتيکه برنامه دوباره اجرا ‎گردد، رکورد ديگري اضافه خواهد شد. البته باتوجه بمشخصاتidوreg_date رکورد تکراري ‎نخواهد بود. ولي ازنظر مفهوم اطلاعاتي تکراريست.

‎‎

‎PHP MySQL Get Last Inserted ID‎

‎‎دريافت آخرينID

‎‎مثال ـ نمايشid هنگام افزايش ‎"insert‎"‎رکورد

‎کنترل مقاديرidدرهنگام افزايش رکورد، دراختيار کاربر نيست. اما دراکثر موارد اثر چنين مشخصه ‎اي يعني کليد اصلي‎ ‎"primerykey‎"‎درعمليات نمايان است، ميتوان ازآن بسرعت بيشتري ‎،باطلاعات دسترسي پيدا کرد. درمثال زير چگونگي نمايش آن مطرح ميگردد. البته اين امکان خاص ‎فيلدهاي افزايشي است. مورد فوق در دستورupdateهم وجود دارد.

‎‎پس ازموفق بودن اجراي دستورinsertبفرم زير مقدارid در متغير last_id قرار ميگيرد.

$last_id = $conn->insert_id;

‎‎براي‎$conn‎ يعني شي ارتباطيinsert_id يک خاصيت بوده که مقدارآن مقدار id است.

‎‎برنامه مطابق زيرميباشد.

 <?php 
$servername = "localhost";
$username = "admin";
$password = "12345";
$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', 'john@example.com')";

if  ($conn->query($sql) === TRUE) {
  $last_id = $conn->insert_id;
  echo "New record created successfully. Last inserted ID is: " . $last_id;
} else {
  echo "Error: " . $sql . "<br>" . $conn->error;
}

$conn->close();
?> 

‎ميتوان مقدار فيلد فوق را از روشهاي ديگربدست آورد، اما مزيت روش اين است که درمرحله inset‎به آن دسترسي ميتوان داشت ..

‎‎

‎‎مثال ـ افزايش چند رکورد اطلاعات(multy insert)

‎دراين مثال برنامه با يک شي ارتباطي چند رکورد به جدولMyGuestsاضافه مي نمايد. ‎البته درخواست مثال از سهinsert دنبال هم تشکيل گرديده است .

$sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe', 'john@example.com');";
$sql .= "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Mary', 'Moe', 'mary@example.com');";
$sql .= "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Julie', 'Dooley', 'julie@example.com')";

‎دراين مثال سه دستورinsertدرقالب مشابه درمتغير sqlذخيرشده اند. اين عمل با کنکت نمودنinsert ‎انجام ميشود. اجراي اين درخواست ازمتد شي ارتبا طي بصورت زير انجام ميشود.

‎$conn->multi_query($sql)

‎متدmuulti-‎qureyبراي درخواست چند تائي است و متد qurey براي يک درخواستي است. ‎البته ميتوان همين درخواست‎"query‎"‎را به سه درخواست تفکيکي تبديل نمود وبراي هرکدام ازمتد ‎استفاده نمود. بعبارتي تاشي ارتباطي بسته نشود ميتوان درجدول مربوطه تغييرات اعمال نمود.

 
 <?php 
$servername = "localhost";
$username = "admin";
$password = "12345";
$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', 'john@example.com');";
$sql .= "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Mary', 'Moe', 'mary@example.com');";
$sql .= "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('Julie', 'Dooley', 'julie@example.com')";

if  ($conn->multi_query($sql) === TRUE) {
  echo "New records created successfully";
}
 else {
echo " sql_Error " . $sql . '<br>' . $conn->error;
}



$conn->close();
?> 

‎براي اجراي هردستوراسکيوال مشمول اطلاعات دومرحله اقدام وجود دارد؛ اولين مرحله آماده سازي ‎دستور‎‎"preparid‎"‎ودومين مرحله اجرا. درمرحله اول قالب دستور بدون اطلاعات دستور ‎بررسي و آماده ‎اجرا ميشود. درمرحله بعد بااطلاعات مندرج دردستوراجراميگردد. درمثال قيلي قالب دستور ‎يکسان است، در هرکدام ازسه فيلد مشترک با موقعيت يکسان در دستوراستفاده شده است. دراجراي ‎عمليات آماده سازي يکسان بوده وتکرارميگردد. اما روشي وجود دارد که ميتواند ازتکرار جلوگيري ‎نمايد. يعني آماده سازي يک بارانجام واجرا تکرارگردد. باين روش مدل آماده شده درpageمروطه ‎نگهداري وبا برخورد بهinsert محتوي اطلاعات اجرا ميگردد .

‎دستورات آماده ساز درمثال مطابق زيراست. متدprepair مربوط به شي‎$conn‎ بوده ‎ودرآن قالب دستورمعرفي ميشود. درعلامت هاي ? دراجرا مقادير جايگزين خواهدشد.

‎دردستور اول شي‎$stmt‎ ايجاد ميشود . اين شي داراي خاصيتbind_param بوده که با آن ‎نوع اطلاعات ومقادير تنظيم ميگردد. پامتراول نوع اطلاعات بوده که براي هرفيلد به ترتيب ‎يك كراكتر منظور ميشود. دراين جا براي مقدارهرسهsيعنيstring درنظرگرفته شده ا ست.

$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $firstname, $lastname, $email);

‎‎مثال ـinsert با روش prepaird

 <?php 
$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);
}

// prepare and bind
$stmt = $conn->prepare("INSERT INTO MyGuests (firstname, lastname, email) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $firstname, $lastname, $email);

// set parameters and execute
$firstname = "John";
$lastname = "Doe";
$email = "john@example.com";
$stmt->execute();

$firstname = "Mary";
$lastname = "Moe";
$email = "mary@example.com";
$stmt->execute();

$firstname = "Julie";
$lastname = "Dooley";
$email = "julie@example.com";
$stmt->execute();

echo "New records created successfully";

$stmt->close();
$conn->close();
?>

‎‎


Previous >    <Next