اتصال به پایگاه داده از طریق PHP و 3 رابط mysql,mysqli و pdo

دسته بندی: پایگاه داده
زمان مطالعه: ۲ دقیقه
۱۳ شهریور ۱۳۹۳

با توجه به اهمیت پایگاه داده این جلسه رو به تشریح کامل نحوه ی اتصال به پایگاه داده از طریق کدهای PHP پرداختیم . در این جلسه 3 رابط mysql , mysqli و pdo را برای اتصال به پایگاه داده ی MySQL معرفی کرده و توضیحات لازم در مورد آنها را ارائه می دهیم .

مطالب ارائه شده در این جلسه عبارتند از :

اتصال به پایگاه داده ی MySQL از طریق PHP

  • روش هاي اتصال به پايگاه داده از طريق PHP با رابط های mysqli, mysql  و PDO
  • آشنایی کلی با رابط MySQL
  • تشریح نحوه اتصال به پایگاه داده از طریق رابط MySQL
  • عدم استفاده از رابط MySQL به خاطر منسوخ شدن آن از ورژن 5.5 php به بعد
  • آشنایی کلی با رابط MySQLi
  • تشریح نحوه اتصال به پایگاه داده از طریق رابط MySQLi
  • آشنایی کلی با رابط PDO
  • تشریح نحوه اتصال به پایگاه داده از طریق رابط PDO
  • اجراي کوئري هاي دلخواه بر روي ديتابيس از طريق PHP و رابط MySQLi
  • ميني پروژه : ایجاد صفحه ای برای اجرای بیش از 20 کوئری مختلف SQL بر روی پایگاه داده با شیوه ای جالب
  • تمرين
تاخیر برای کیفیت :

با توجه به اینکه مطالب دوره پیشرفته تر شده اند، برای حفظ کیفیت کار ممکنه سرفصل ها رو کمی تغیر و یا گسترش بدیم . به همین دلیل تولید مقدمات جلسات اینده ممکنه بیش از گذشته زمانبر باشه . لذا اگر در آینده با کمی تاخیر در انتشار ویدیوها روبرو شدید صرفا به خاطر حفظ کیفیت محتوایی ویدیو هاست . ولی تمام سعی خود را خواهیم کرد که به هر شکل 3 جلسه در هفته رو منتشر کنیم . پیشاپیش از شما بابت این مورد عذرخواهی می کنیم . قطعا ایجاد کمی تاخیر برای بالا بردن کیفیت تدریس ارزش خودش رو داره . دلیل عدم انتشار جلسه ی دوشنبه هم آماده سازی یه سری مقدمات برای جلسه های آینده بود . از صبوری شما متشکرم .

:: توجه

این مطلب یک جلسه از آموزش PHP می باشد و برای مشاهده آن باید در دوره ثبت نام کنید.

ثبت نام در آموزش PHP

نویسنده
بیش از 15 سال هست که برنامه نویسی می کنم و از بین همه زبون هایی که کار کردم جاوا، اسمبلی و php رو دوست دارم. دانشجوی دکترای نرم افزارم و توی دانشگاه روی پردازش بیگ دیتا و پردازش موازی کار کردم و عاشق چالش از هر نوعیش هستم! سون لرن مثل بچه منه که 12 سال براش وقت گذاشتم، اینجا همه تلاش می کنیم از شروع یادگیری تا ورود به بازر کار حوزه برنامه نویسی و IT همراهتون باشیم.

جلسات دوره

نظرات کاربران

mohsen karimi

با سلام خدمت استاد عزیز؛
من تو این جلسه به یه مشکل خوردم و اینکه تابع mysql_real_escape_string تو common.php منسوخ شده و من بجای این تابع از mysqli_real_escape_string استفاده کردم. ولی این تابع دو تا پارامتر میگیره. یه پارامتر $input هست پارامتر دوم چی باید قرار بدم؟

محمدامین عطائی

سلام من موقعی که فایل common.php رو include کردم و این کدها رو توی mysqli زدم با ارور مواجه شدم :
Fatal error: Uncaught Error: Call to undefined function mysql_real_escape_string() in /opt/lampp/htdocs/7learn/common/common.php:166 Stack trace: #0 /opt/lampp/htdocs/7learn/17/mysqli.php(17): sanitize(‘sad’) #1 {main} thrown in /opt/lampp/htdocs/7learn/common/common.php on line 166

<?php
    require_once "../common/common.php";
    require_once "config.php";
    $mysqli = new mysqli($dbHost, $dbUser, $dbPass, $dbName);
    if(!$mysqli -> select_db($dbName)) {
        echo "<span style=’…’>Problem Selecting database ";
        exit(0);
    }
    if($mysqli -> connect_errno) {
        printf("Connection failed: %s\n", $mysql -> connecy_errno);
        exit();
    }

    echo "Connect successfully to database <b>$dbName</b>. (Using mysql_connect) <br>";

    if(isset($_GET["op"])) {
        $op = sanitize($_GET["op"]);
        if(isset($_GET["database"])) {
            $db = sanitize($_GET["database"]);
            $doPrint = false;
            switch($op) {
                case "show":

                break;
                case "create":

                break;
                case "show":

                break;
                default:
                    echo "<span style=’color: red; font-weight: bold’>Inavalid Operation</span>";
                    exit();
                break;
            }
        }
    }

    $mysqli -> close();
?>
مصطفی

سلام
من کد زیر رو نوشتم ولی با این ارور مواجه میشم:
Notice: Trying to get property ‘num_rows’ of non-object in C:\wamp64\www\Learning\17\me\mysqli.php on line 15

<?php
require_once "config.php";
include "../../common/common.php";

$mysqli = new mysqli($dbHost, $dbUser, $dbPass);

if ($mysqli->connect_errno) {
    printf("اتصال با شکست روبرو شد : %s\n", $mysqli->connect_error);
    exit();
}

echo "اتصال موفقیت آمیز <br>";

$sql = "select * from customers";
$result = $mysqli->query($sql);
echo $result->num_rows;
مصطفی

با جستجو بالاخره فهمیدم که نام دیتابیس رو نزده بودم :دی

پدرام فیروزکوهی

سلام خسته نباشید
ممنون بابت آموزش فوق العاده شما فقط من یه مشکلی دارم توی 2 قسمتی که شما از like استفاده کردید یعنی gmail customers و delete random categories که از کوئری لایک استفاده شده من هر وقت از % استفاده میکنم صفحه 404 not found میده حتی کل فایلهای شما رو کپی کردم همینطوریه باز هم گفتم شاید بخاطر غیرفعال بودن asp tag باشه اونم فعال کردم باز هم سر like ارور بالا رو میده لینکی که برمیگردونه عین ماله شماست اما باز ارور بالا رو میده ممنون میشم راهنمایی کنید :
این لینکی هست که برای من میاد : http://localhost:63342/practise/mysqli.php?op=select&fields=*&table=customers&where=email%20like%20%27%@gmail.%%27

Farid S

من متوجه نشدم این کاندیشن درون پرانتز while چجوری هربار یک مقدار از آرایه رو برمیگیرونه

    while($row = $result->fetch_array(2)){ 
        echo "<tr style=’background-color: #f7f7f7;’>";
        foreach($row as $val){
            echo "<td style=’padding: 2px 7px’>$val</td>";
        }
        echo "</tr>".PHP_EOL;
    }
کیوان علی محمدی

تابع fetch_array هر بار مقداری رو برمیگردونه و داخل row قرار میده و تابع while هم تا زمانی که این مقدار برابر false نشه حلقه رو ادامه میده.

فلاح نژاد

سلام
من یه فرم عضویت طراحی کردم که در ثبت کردن اطلاعات کاربر توی دیتابیس مشکلی نداره! ولی من میخوام قبل از اینکه اطلاعات رو ثبت کنه چک کنه آیا اون کاربر قبلا عضو شده یا نه!برای این کار هم از دستور SELECT استفاده کردم!
فقط مشکل من این هست چطور یک فیلد دیتابیس رو انتخاب کنم و داخل اون فیلد عملیات جستجو رو انجام بدم؟!

وحید صالحی

سلام باید از شرط استفاده کنید در دستور SELECT مثلا:
;”select * from `tbl_user` where username=`ali`” حالا مقدار ali رو برحسب رابط دیتابیس باید براش مقدارش رو از فلید فرم ورود که کاربر پر کرده و ارسال کرده بگیرید و جایگزین مثالمون که ali بود کنید

فلاح نژاد

الان فهمیدم که باید با دستور sql این مشکل رو برطرف کنم ولی سوالی که الان به وجود اومده این هست که
Fetch_fields
و
Fetch_array
کاربرد شون چی هست؟! چون آقای آوند برای چاپ جدول ها از این دو مورد استفاده کردن!

وحید صالحی

Fetch_fileds اطلاعات یک ستون را از یک مجموعه جواب می گیره و بصورت یک شی را بر می گردونه ولی Fetch_array مجموعه جواب بازگشتی بصورت آرایه انجمنی یا اندیسی یا هر دو مورد برمی گردونه

سحر بشری

سلام استاد خسته نباشید.مینی پروژه ارور میده:
Warning: mysqli_real_escape_string() expects exactly 2 parameters, 1 given in C:\xampp\htdocs\php\common\common.php on line 166
کامنت های این جلسه رو خوندم ی نفر هم این مشکلو داشت و شما گفتید قبل اسم تابع @ بزاره که ارور دیده نشه ولی خوب اینطوری هم اجرا نمیشه پارامتر اتصال هم بهش دادم اما درست نشد و اخرش هم Invalid Operation .. مینویسه .چیکار کنم درست شه؟

کیوان علی محمدی

خطا داره میگه این تابع نیاز به دو تا پارامتر داره در حالی که فقط یک پارامتر براش ارسال شده. خودتون بهتره یک خط قبلش یک کد var_dump قرار بدین و چک کنید پارمتر های ارسالی به این تابع به چه شکل هستند.

سحر بشری

سلام روز بخیر. اینکه این تابع دو پارامتر میگیره میدونم اولین پارامترش اتصاله و دومی پارامتر رشته ایه. اما چون تابع تو یه صفحه دیگ تعریف شده و اتصال هم جایی دیگ وقتی پارامتر اتصال رو میزارم نمیشناسه.بعدش برای تابع هم دو پارامتر تعریف کردم و از جایی هم که اسم تابع خونده میشه دو مقدار دادم که یکیش پارامتر اتصال بود اما بازم نشد

سحر بشری

اقای علیمحمدی درست شد اما از global نتونستم همون روش دو پارامتری که گفتم برای تابع تعریف کردم انجام دادم درست شد.این روش مشکلی نداره؟؟؟
البته ممنون که کامنتای قبلی رو پاسخ دادین و راهنماییم کردین اینقد خوشحااالم درست شد

کیوان علی محمدی

من الان نمیدونم تابع شما چی هستش که دو تا پارامتر براش تعریف کردین ^_^ .https://7learn.com/wp-admin/edit-comments.php#comments-form

کیوان علی محمدی

خوب مقدار اتصال رو به صورت global فراخوانی کنید و تست کنید.

afagh11944

ببخشید

  $resultval = $this-&gt;client-&gt;call('bpPayRequest', $params, $this-&gt;namespace); 

در کد بالا که برای اتصال به درگاه بانک ملت هست پارامتر namespace که یک ادرس هم هست برای چیه دقیقا برای چه کاریه این پارامتر

لقمان آوند

فضای نام رو مشخص می کنه. بهتره در مستندات درگاه بانک در موردش بخونید. namespace معمولا برای جلوگیری از بروز تداخل نام و یا استفاده راحتتر از توابع و متدها در یه کتابخانه یا برنامه استفاده میشن.

لقمان آوند

سمت چپ رکورد ها یه چک باکس هست می تونید رکوردهایی رو که می خواید تیک بزنید و انتخاب کنید و از پایین جدول عملیاتی که می خواید رو انتخاب کنید و روشون اعمال کنید.

پایان زمان پشتیبانی

دانشجوی گرامی، بازه پشتیبانی فعال برای این دوره ۳ ماه است که برای شما به پایان رسیده است.

شما هم چنان می توانید سوالات خود را در این قسمت بپرسید اما اولویت پاسخ گویی با دانشجویانی است که بازه پشتیبانی فعال دارند.

نیاز به لاگین

برای ارسال دیدگاه و یا پرسیدن سوال خود در این قسمت، باید در سایت لاگین شوید.
گزارش مشکل