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

در مطلب گذشته از بخش آموزش مقدماتی 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 با UPDATE
استفاده از JOIN و ساخت پرس و جوی ترکیبی در MySQL
حذف مقادیر از MySQL با دستور DELETE
توابع تجمیعی (Aggregate Functions) در MySQL
انتخاب ردیف ها با دستور SELECT در MySQL


ببینید من یک دیتابیس با collation دیفالت ساختم
(collation=swe-swedish-ci)
موقع ساختش اصلا به collation توجه نداشتم چون وقتی در فیلد هایی مثل نام از طریق کدهای php نام فارسی insert می کردم در خروجی که از جداول دیتابیسم میگرفتم فیلد هام رو درست نشون میداد. یعنی مثلا نام ها رو با همان کاراکتر های زبان فارسی برمیگردوند.
با اینکه وقتی table هام رو در mysql میدیدم به جای کاراکتر های فارسی یکسری کاراکتر های نامفهوم درج شده بود.
برنامه ام مشکلی نداشت و حالا نزدیک 2000 تا رکورد تو دیتابیسم ذخیره شده.
ولی الان مشکلی پیش اومده که من حتما باید فیلد هایی که در اونها فارسی درج کردم را در mysql هم با کاراکتر های فارسی ببینم.
با تبدیل collation دیتابیس تغییری در رکورد های قبلی ایجاد نمیشه.
لطفا راهنمایی کنید.
چطور میشه یک ردیف ساخت که شمارهاش با حذف یا افزودن رکورد update شود
لطفا در خصوص مراحل گفته شده در وب جستجو کنید.
من میخوام یک پی اچ پی با استفاده از جداول اس کیو ال بسازم که برای نمایشگاه ماشین باشه و شامل گزینه های خرید و فروش و نمایش و جستجو و بروز رسانی اطلاعات باشه و مقادیر نام ماشین و کد ماشین و شرکت سازنده و سال تولید و رنگ و قیمت باشه
لطفآ راهنماییم کنید
قاعدتا باید برنامه نویسی بلد باشید که اینچنین سیستمی را تعریف کنید، لذا فراگیری آموزش های PHP و MySQL از سطح مقدماتی و تمرین و تکرار توصیه می شود!
خطایی رخ داده است:
Access denied for user ''@'localhost' to database 'db_name
TINYTEXT - 255 bytes
TEXT - 65535 bytes
MEDIUMTEXT - 16,777,215 bytes (2^24 - 1)
LONGTEXT - 4G bytes (2^32 – 1)
که برای متن های خیلی خیلی طولانی (در حد حجم 4 گیگابایت)، LONGTEXT انتخاب مناسبی است.یک سوال داشتم آیا امکان افزودن ستون به جدول بعد از ایجاد جدول وجود دارد . اگر این امکان وجود دارد دستور مربوط به آن چیست؟
mysqli_query($conn, "ALTER TABLE tbl_name ADD COLUMN new_col_name INT(11) NOT NULL DEFAULT 0 AFTER col_name")
or die(mysqli_error($conn));
کد بالا یک ستون فرضی از نوع INT بعد از ستون col_name می سازد.اتصال برقرار نشد: Access denied for user 'username'@'localhost' (using password: YES)
اما جهت اطلاعات بیشتر، نوع داده برای ذخیره تصاویر در MySQL نوع BLOB به معنی Binary Large OBject است که برای نمایش تصویر باید یک دستور header تنظیم کنید:
header("Content-type: image/jpeg");
echo $row['image_column'];
توجه کنید که قبل از این دستورات هیچ خروجی نباید به مرورگر ارسال شود (شامل کاراکترهای نامرئی BOM نیز می شود)، روش دیگر نمایش، استفاده از data:image و base64_encode است:<?php echo '<img src="data:image/jpeg;base64,' . base64_encode($row['image_column']) . '">'; ?>
SET NAMES 'utf8'
در کل برای پشتیبانی کامل و نمایش حروف فارسی در دیتابیس به شکل صحیح، در درجه اول باید Server connection collation دیتابیس راutf8_persian_ci
انتخاب کنید، سپس مراحل زیر را انجام دهید:- از متاتگ زیر در تمام صفحات استفاده کنید:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
- علاوه بر دیتابیس، جداول و ستون ها را نیز با یونیکدutf8_persian_ci
بسازید.- پس از اتصال با دیتابیس، پرس و جوی زیر را هم اجرا کنید:
SET NAMES 'utf8'
مسیری که گفتید رفتم ولی توی sql چند تا تب هست که مربوط به کدهای delete , clear, update,select,select * ,insert هستش و توی هر کدوم کدهای مربوطه به اون !
مثلا توی insert:
INSERT INTO `akhbar`(`id`, `onvan_khabar`, `aks_khabar`, `matn_khabar`, `datetime`) VALUES ([value-1],[value-2],[value-3],[value-4],[value-5])
نوشته شده من کدی گفتید رو کجا اضافه کنم؟ در ضمن گزینه save توی این صفحه نیست! این کد رو که اضافه میکنم دوباره که برمیگردم به این صفحه چیزی save نشده!ممنون میشم بگید چیکار کنم ؟
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.