شنبه ۲۲ شهریور ۱۴۰۴

Saturday, September 13, 2025 GMT +3:30
دسته بندی
×

اتصال PHP به MySQL با اکستنشن MySQLi

mysql

در مطلب گذشته از بخش آموزش مقدماتی MySQL با کلیاتی از پرکاربردترین سیستم مدیریت پایگاه داده آشنا شدیم، گفتیم که به طور معمول پایگاه داده MySQL را با دو روش می توانیم مدیریت کنیم، روش اول استفاده از رابط کاربری برنامه phpMyAdmin و به صورت دستی است که در این خصوص توضیحات مختصری ارائه شد، روش دوم که هدف اصلی ما در این سری از آموزش ها است، ارتباط و مدیریت پایگاه داده MySQL با برنامه نویسی PHP است که بدین منظور در کنار کدهای PHP از برنامه های نرم افزاری کوچکی تحت عنوان اکستنشن در مفسر این زبان باید بهره بگیریم، اکستنش های ارتباط با MySQL در PHP سه مورد هستند، MySQL، MySQLi و PDO که به جهت قدیمی و منسوخ شدن MySQL از توضیح آن صرف نظر می کنیم، اکستنشن PDO نیز به جهت ماهیت کاربرد چندگانه آن در جای خود آموزش داده خواهد شد، در مباحث این بخش از اکستنشن MySQLi (نسخه بهبود یافته اکستنشن MySQL، حرف i به معنی improved) که به طور اختصاصی برای ارتباط PHP با MySQL طراحی شده است به روش برنامه نویسی رویه ای (Procedural) و شی گرا (Object-oriented) استفاده می کنیم.

اتصال به دیتابیس در اکستنشن MySQLi


برای اتصال به دیتابیس قبل از هرچیز باید پایگاه داده ساخته باشیم، برای انجام این کار می توانیم از برنامه phpMyAdmin وارد سربرگ Databases شده و در فیلد "Create database" نام پایگاه داده مد نظر خود را وارد، از قسمت Collation گزینه utf8_persian_ci را انتخاب و در نهایت بر روی دکمه "create" کلیک نمائیم.
نکته: عمدتا در لوکال می توانیم به صورت پیش فرض با نام کاربری root و بدون پسورد از دیتابیس استفاده کنیم اما در سرور اصلی معمولا باید ابتدا یک نام کاربری با کلمه عبور ساخته و آن را برای استفاده از پایگاه داده مد نظر تنظیم نمائیم، این موارد از طریق برنامه های مدیریت هاست مانند DirectAdmin ،cPanel و... قابل انجام است، به طور مثال در cPanel از قسمت Databases گزینه MySQL Databases با امکاناتی نظیر Create New Database، MySQL Users، Add New User، Add User To Database و... می توانیم دیتابیس و کاربر ساخته و در نهایت کاربر را به دیتابیس اختصاص دهیم (اجازه استفاده از دیتابیس را به کاربر مد نظر بدهیم).
پس از ایجاد دیتابیس از طریق واسط کاربری برنامه phpMyAdmin، به طور معمول نخستین گام در برنامه های تحت وب برقراری اتصال بین کدهای PHP و سیستم مدیریت پایگاه داده MySQL است، در ادامه خواهیم دید چگونه با استفاده از دستورات اکستنشن MySQLi در PHP می توانیم به دیتابیس MySQL متصل شویم، در نمونه کدهای زیر این کار انجام شده است.
برنامه نویسی رویه ای (Procedural):
<?php
//اتصال به دیتابیس
$conn = mysqli_connect("localhost", "username", "password", "dbname");
if(!$conn) {
    echo "PHP & MySQL Connection: Error! " . mysqli_connect_errno() . ' - ' . mysqli_connect_error();
    exit;
} else {
    echo "PHP & MySQL Connection: Ok!<br>";
}
//پایان اتصال
mysqli_close($conn);
?>
برنامه نویسی شی گرا (Object-oriented):
<?php
//اتصال به دیتابیس
$conn = new mysqli("localhost", "username", "password", "dbname");
if(!$conn) {
    echo "PHP & MySQL Connection: Error! " . $conn->errno . ' - ' . $conn->error;
    exit;
} else {
    echo "PHP & MySQL Connection: Ok!<br>";
}
//پایان اتصال
$conn->close();
?>
در شرح نمونه کد بالا ابتدا اطلاعات پایگاه داده خود را که قبلا ساخته ایم در مقادیر مشخص شده وارد می کنیم، به جای username نام کاربری پایگاه داده، در قسمت password کلمه عبور و در قسمت dbname نام دیتابیسی که ساخته ایم را می نویسیم، به طور مثال در لوکال از نام کاربری root بدون پسورد استفاده می کنیم:
$conn = mysqli_connect("localhost", "root", "", "dbname");

$conn = new mysqli("localhost", "root", "", "dbname");
اگر همه چیز درست باشد با فراخوانی فایل PHP و اجرای دستورات بالا پیام "PHP & MySQL Connection: Ok" را در خروجی خواهیم داشت در غیر این صورت قسمت else اجرا شده و خطای مربوطه نشان داده می شود، نهایتا نیز با تابع mysqli_close (در برنامه نویسی رویه ای) و متد close (در برنامه نویسی شی گرا) به ارتباط پایان می دهیم (در حال حاضر نیازی به درک عمیق دستورات MySQLi نیست، صرف آشنایی ظاهری با نمونه کدها برای این سطح کفایت می کند).
دسته بندی: آموزش مقدماتی » MySQL
related مطالب بیشتر:
استفاده از JOIN و ساخت پرس و جوی ترکیبی در MySQL
ساخت دیتابیس، جدول و ستون با دستور CREATE در MySQL
به روز رسانی ردیف ها در MySQL با UPDATE
انتخاب ردیف ها با دستور SELECT در MySQL
محدودسازی، گروه بندی و مرتب سازی نتایج در MySQL
دیدگاه
more ۳۴ دیدگاه برای این مطلب ارسال شده است.
more چینش دیدگاه ها به ترتیب از جدیدترین به قدیمی ترین است.
Zahra
۱۸:۰۷ ۱۴۰۱/۰۳/۰۶
سلام وقت بخیر
ببخشید من از روش شی گرا استفاده کردم ولی به کلمه ای که جلوی new مینویسم ارور میده میخوام به پایگاه داده sql وصل بشم نه mysql میشه راهنمایی کنید جلوی new چی بنویسم ؟؟
اکستنش MySQLi صرفا با دیتابیس MySQL سازگار است، برای اتصال PHP با SQL Server باید از اکستنشن PDO استفاده کنیم که مباحث جداگانه ای دارد، راهنمایی بیشتر و نمونه کد:
https://www.educative.io/edpresso/how-to-connect-to-an-sql-database-in-php
علی
۱۲:۰۸ ۱۴۰۱/۰۱/۱۲
ببخشید من همه این کدها رو میزنم اما وصل نمیشه توی برنامه vscod میزنم سایتمو طراحی کامل کردم حالا میخوام php انجام بدم کدا میزنم اصلا انگار نه انگار کد زدم و اصلا کدهاش رنگی نمیشن
پسوند فایل را php ذخیره می کنید؟ اگر به صورت آفلاین کدنویسی می کنید برنامه سرور مجازی مثل WampServer یا XAMPP را نصب کرده اید؟ نام دیتابیس، نام کاربری و کلمه عبور دیتابیس را صحیح تنظیم کرده اید؟ همه این موارد و دلایل ساده دیگری می توانند مانع اجرا یا اتصال به دیتابیس MySQL شوند که در هر صورت مشکل باید در سیستم یا سرورتان بررسی شود.
یزدخواستی
۱۲:۰۹ ۱۳۹۸/۰۲/۲۳
سلام سوالی دارم فرض کنید داخل برنامه php دیتابیس را باز کرده ایم و در حال query هستیم حالا اگر مثلا کسی در حال آپدیت و یا هر کار دیگری روی دیتابیس باشد آیا این query ما صحیح است؟
از نظر فنی و ایجاد اختلال در دیتابیس مشکلی بروز نمی کند چون موتورهای MySQL از جمله MyISAM و InnoDB از Table و Row Locking استفاده می کنند، به این معنی که در حین اجرای عملیاتی نظیر INSERT یا UPDATE جدول یا ردیف مربوطه قفل شده و سایر درخواست ها تا اتمام اجرای درخواست فعلی در حالت انتظار قرار می گیرند، البته درصد تداخل پرس و جوها با توجه به تعداد کاربران می تواند خیلی محدود یا با احتمال بالاتر باشد اما در کل اجرای دستورات در چند ثانیه یا کمتر انجام می شود، اما از نظر نرم افزاری و ساختار برنامه این وظیفه برنامه نویس است که از تداخل کار بین کاربران مختلف به روش های ممکن جلوگیری کند، به فرض وقتی مطلبی در حال ویرایش است امکان ویرایش برای سایر کاربران با نمایش آیکن قفل فراهم نباشد.
motlagh
۱۴:۳۸ ۱۳۹۷/۰۶/۰۴
با سلام من به کمک آموزش شما در قسمت ایجاد جدول یک جدول ساختم ولی جدول در phpmyadmin ساخته نمیشه و در صفحه وب
Creating Table tblname: Error!
چچجوری میتونم این مشکل رو رفع کنم هر کاری کردم نشد
این کدها برای اجرا در PHP هستند، یعنی باید در سرور مجازی (لوکال هاست) یا به صورت آنلاین، فایل PHP در صفحه مرورگر فراخوانی و اجرا شود، یک ایراد جزئی نیز در کدها وجود داشت که آرگیومنت نام دیتابیس در قسمت تابع اتصال از قلم افتاده بود، دستورات اصلاح شد و می توانید از کدهای حاضر استفاده کنید، دقت داشته باشید که در قسمت نام کاربری و کلمه عبور اطلاعات اتصال به دیتابیس خود را وارد کنید (برای اطلاعات بیشتر لطفا آموزش را به دقت مطالعه کنید).
مهدی غلامی
۱۹:۳۵ ۱۳۹۶/۱۲/۱۱
سلام خسته نباشید
ممکنه در مورد کد ایجاد دیتابیس راهنمایی کنید؟
قسمت username و password باید مشخصات هاست رو بزاریم؟
اصلا هر کاری میکنم ایجاد نمیشه دیتابیس
ممنون میشم راهنمایی کنید
اگر ممکنه جواب رو ایمیل کنید یک دنیا سپاسگذارم چون واقعا لازم هست
ممنون از سایت خوبتون
برای اتصال به دیتابیس باید ابتدا آن را از طریق پنل سایت (در سرور) یا برنامه phpMyAdmin (در لوکال هاست) بسازید، سپس یک کاربر (با نام کاربری و کلمه عبور مشخص) ساخته و به آن دیتابیس نسبت دهید (معمولا در لوکال هاست نیازی به این کار نیست، با نام کاربری root و بدون پسورد می توانید به دیتابیس متصل شوید)، در صورتی که همچنان با مشکل مواجه بودید لطفا آموزش های مقدماتی را به صورت قدم به قدم مطالعه کنید.
۰۲:۴۲ ۱۳۹۵/۰۹/۱۲
سلام این ساخت با ساخت در درون هاست چه فرقی دارد ؟
به لحاظ نتیجه فرقی وجود ندارد، منتها شیوه کدنویسی برای ایجاد نرم افزارهای تحت وب مورد نیاز است و شیوه دستی می تواند برای مواردی مانند اعمال تغییرات جزئی یا نگهداری دیتابیس استفاده شود!
محمد
۱۷:۴۵ ۱۳۹۵/۰۴/۱۱
با سلام و خسته نباشید. تشکر می کنم از راهنماییهای خوب و دقیقتون. ببخشید با کد
alter table table_name convert to character set utf8; 
که گفتید جداول درست شدند اما بازهم زیر کل جدول ها برای جمع utf8 نشده، روشی هست که بجای وارد کردن نام تک تک جدول ها بجای table_name بتوان همه جداول را یکجا utf8 کرد؟
به نظر این کار باید از ابتدا و هنگام ساخت دیتابیس انجام می شد، با این حال اگر یک اسکرین شات از جداول و منظورتان تهیه کنید، می توان دقیقتر راهنمایی کرد.
سیما
۱۲:۳۴ ۱۳۹۵/۰۴/۰۶
سلام با این روشی که برای ایجاد جدول معرفی کردید
متاسفانه بازم جدول من فارسی رو ساپورت نمیکنه و علامت سوال نشون میده
در واقع ستون ها همون زبان لاتین هستش
ممنون میشم راهنمایی کنید
برای پشتیبانی کامل و نمایش حروف فارسی در دیتابیس به شکل صحیح، در درجه اول باید Server connection collation دیتابیس را
utf8_persian_ci
انتخاب کنید، سپس مراحل زیر را انجام دهید:
- از متاتگ زیر در تمام صفحات استفاده کنید:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
- علاوه بر دیتابیس، جداول و ستون ها را نیز با یونیکد
utf8_persian_ci
بسازید.
- پس از اتصال با دیتابیس، پرس و جوی زیر را هم اجرا کنید:
SET NAMES 'utf8'
ehsan sam
۱۷:۵۵ ۱۳۹۵/۰۲/۱۰
سلام،
نمیدونم سوالی که میپرسم جاش همین جاست یا نه!
من قصد اضافه کردن سیستم کلمات کلیدی برای هر پست رو در یک اسکریپت دست ساز دارم اما نمیدونم این فرآیند توسط چه دستوری و چه طوری انجام میشه یعنی در واقع میخوام بتونم واسه هر پست یه سری کلمات کلیدی جدا تعریف کنم و این کلمات در جداول دیتابیس ایمپورت بشه کمکم کنید...لطفا کاملا واضح توضیح بدید...آماتور هستم... پیشاپیش تشکر میکنم...
این یک کار حرفه ای و فنی است، توضیح کار چندان ساده نیست!، اگر اسکریپت بخش ارسال مطلب دارد (که معمولا به این شکل است)، باید ابتدا در فرم HTML آن، یک فیلد جدید ایجاد کنید تا اطلاعات این فیلد به عنوان کلمات کلیدی به سرور ارسال شود، در سرور (و در واقع در کدهای PHP) باید مقادیر این فیلد از طریق متد POST یا GET دریافت شود، سپس این مقادیر مانند سایر اطلاعاتی که از فرم HTML در دیتابیس ذخیره می شود، در پرس و جوی مربوطه جایگذاری شده و در دیتابیس ذخیره شود (قاعدتا از قبل باید ستون مربوط به کلمات کلیدی را در دیتابیس ساخته باشید)، با این حساب باید فایل های اسکریپت به دقت بررسی شوند تا کارکرد هر قسمت مشخص شود، این کار هم معمولا نیازمند داشتن تجربه برنامه نویسی و مهارت کدخوانی بالا است!
نازنین
۲۲:۲۱ ۱۳۹۴/۰۸/۲۵
سلام
من یک db ایجاد کردم در phpmyadmin که داخل آن جدول درست کردم ولی :
مشکل اینجاست که محتوای جدول من به این صورت:
این یک نمومه مقاÙ
در صورتی میخوام محتوا در همین phpmyadmin فارسی نمایش دهد نه فقط در مرورگرم
ممنونم میشم راهنماییم کنید با تشکر..
در مجموع برای اینکه مشکلی از لحاظ ذخیره و نمایش حروف فارسی در دیتابیس نداشته باشید باید تمام مراحل زیر را به صورت صحیح انجام دهید:
در درجه اول باید Server connection collation دیتابیس را
utf8_persian_ci
انتخاب کنید، سپس مراحل زیر را انجام دهید:
- از متاتگ زیر در تمام صفحات استفاده کنید:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
- علاوه بر دیتابیس، جداول و ستون ها را نیز با یونیکد
utf8_persian_ci
بسازید.
- پس از اتصال با دیتابیس، پرس و جوی زیر را هم اجرا کنید:
SET NAMES 'utf8'
- اگر مشکل همچنان حل نشد، فایل های خود را با ویرایشگر ++Notepad باز کرده و سپس از قسمت Encoding گزینه Encoding UTF-8 without BOM را انتخاب و فایل خود را مجددا ذخیره نمائید.
بهنام
۲۰:۴۸ ۱۳۹۴/۰۵/۲۲
سلام استاد عزیز
در دستور mysql میخواستم بدونم استفاده از کاراکتر ` ` ضروری است یا خیر ایا استفاده از این در روند کدنویسی استاندارد کمکی میکند یا خیر؛ یا استفاده از این در کدنویسی زیر صحیح است یا خیر مثلا یه برنامه پیشرفته بخوام بنویسم استفاده کنم بهتر است یا نه کمک کنید
mysql_query("CREATE TABLE `sina`(
`id` INT NOT NULL AUTO_INCREMENT,
`name` TEXT NOT NULL,
`title` VARCHAR(2),
PRIMARY KEY(`id`))
DEFAULT CHARACTER SET `utf8`
COLLATE `utf8_persian_ci`
ENGINE `InnoDB`");
به طور مثال سینا رو در `` قرار دادم و اسم های جداول رو و
`utf8_persian_ci`
- در MySQL از علامت back tick زمانی استفاده می کنیم که نام جدول یا ستون های ما جزء کلمات رزرو شده باشند:
https://dev.mysql.com/doc/refman/5.5/en/keywords.html
یا اینکه به فرض بین کلمات نام انتخابی جدول، فاصله خالی وجود داشته باشد و...
- در حالت کلی استفاده از کلمات رزرو شده به عنوان نام جدول یا ستون ها توصیه نمی شود، لذا بهتر است به استفاده از علامت ` عادت نکنید!
- در حالت استفاده نکردن از علامت ` باید دقت کنید که گاهی خطایابی ممکن است سخت به نظر برسد، چون در صورتی که یک نام رزور شده برای جدول یا ستون انتخاب کنید، MySQL از پرس و جوی شما خطا می گیرد، بدون اینکه توضیح واضحی در این خصوص بدهد (صرفا اشاره می کند که یک خطا در پرس و جوی شما وجود دارد، لذا در هنگام بروز خطای غیر معمول، همیشه باید این مورد را لحاظ کنید که نام جداول یا ستون ها جزء موارد رزرو شده نباشد).
- در پرس و جوی شما برای سایر موارد (که نام جدول یا ستون نیستند) نباید از علامت ` استفاده شود، برای رشته ها از علامت ' یا همان single quotation و برای سایر موارد بدون علامت استفاده کنید.
https://dev.mysql.com/doc/refman/5.0/en/create-table.html
به طور مثال با توجه به جدول راهنمای لینک فوق، DEFAULT CHARACTER SET جزء table_option است و باید به یکی از صورت های زیر باشد:
DEFAULT CHARACTER SET=charset_name
DEFAULT CHARACTER SET charset_name
CHARACTER SET=charset_name
CHARACTER SET charset_name
نکته: با توجه به قدیمی و منسوخ شدن اکستنشن MySQL بهتر است به جای آن از MySQLi یا PDO استفاده کنید.
mohammad
۲۰:۴۴ ۱۳۹۴/۰۵/۱۱
سلام تو پروژم از نرم افزار xampp استفاده کردم ولی دیتابیس رو نمیشناسه مثل برنامه شما نوشتم تنها فرقش اینکه من از mysqli استفاده کردم ولی پیغام میده خطا دیتابیس نام دیتابیسم درست زدیم و ساختیمش با easy php ورژن جدیدش درسته ولی با xampp نمیدنم چرا خطا میده شما نمیدونید مشکل از کجاست
لطفا متن خطای دریافتی یا لینک یک اسکرین شات را درج کنید تا امکان بررسی وجود داشته باشد!
مریم
۱۱:۰۸ ۱۳۹۴/۰۵/۱۰
مشکلم حل شد. خیلی ممنون از اینکه به سوالم پاسخ دادید.
مریم
۱۹:۵۹ ۱۳۹۴/۰۵/۰۸
با عرض سلام. من صفحه ای طراحی کرده ام که کاربر می تواند نام مورد نظر را وارد نماید و سپس با انتخاب کلید افزودن یک جدول به همان نام در دیتابیس ایجاد می شود. مشکل اینجاست که اگر کاربر نامی را وارد نماید که دارای space باشد برنامه error میدهد. می شود راهنمایی کنید. با تشکر
در هنگام ساخت پرس و جوی داینامیک، نام جدول را داخل علامت backticks (`) قرار دهید، احتمالا مشکلتان حل خواهد شد، مثال:
<?php $query = "CREATE TABLE `".$tbl_name."`"; ?>
سلام
۱۹:۲۱ ۱۳۹۴/۰۱/۲۷
سلام ممنون از مطالب خوبتون ببخشي من رشتم كامپيوتر نيست ميشه جواب اين سوالم رو بديد
برای نصب يك نرم افزار اول بايد ديتابيس را نصب كنيم؟ اگر نه ، اين ديتابيس از كجا مياد؟
سوالتان مبهم است! منظور نصب چه نرم افزاری است؟!
سیستم ایجاد و مدیریت دیتابیس در سرورهای محلی (localhost) به همراه برنامه (به فرض WampServer) نصب می شود و در سرورهای حقیقی (آنلاین) نیز با کمی تفاوت، با پیکربندی سرور و نصب نرم افزارهای مورد نیاز قابل استفاده می شود.
more لطفا پیش از ارسال دیدگاه نکات زیر را مد نظر داشته باشید:
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.



 refresh
10 × 10
8 × 6
20 × 20
=