در دوبخش قبلي، ديتابسmydbوجدولmyGuests درآن ديتابيس ايجادشد. جدول فوق داراي پنخ فيلد بنامهاي زيرميباشد.
فيلدidازنوع افزايشي است ونيارباعلام مقدارندارد. فيلدreg_date هم مقدار پيش فرض دارد. اگراعلام نشود، پيش فرض آن درج ميگردد.
افزايش سطراطاعات درجدول ، دستوراسكيوالinsert است، که بايد مطابق فرمت سيستم بانك اطلاعاتي ودر محيط مورد نظر اجرا شود. دراينجا سيستم بانک اطلاعاتيmysql ومحيط اجرا php ميباشد . دستور فوق براي سيستمهاي اطلاعاتي يکسان بوده وفرمت اسکيوال اساندارد ميباشد. فرمت دستور مطابق زيراست.
insert into tablename (col1,col2,col3,...) valuse(value1,value2,value3,...)
در قسمت اول دستور نام فيلدها ودرقسمتvaluseبه ترتيب مقاديرآن قرارميگيرد. نحوي اعلام مقادير مطابق زيراست.
دراين بخش هم مشابه بخش قبلي براي افزايش اطلاعات در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 رکورد تکراري نخواهد بود. ولي ازنظر مفهوم اطلاعاتي تکراريست.
مثال ـ نمايش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(); ?>