سبد (0)

تبلیغات

ارتباط به پایگاه داده mysql در PHP

در PHP نسخه 5 به بالا، برای کار با پایگاه داده MySQL می توانید یکی از روش های زیر را استفاده نمایید:

  • افزونه MySQLi (کاراکتر i مخفف improved بمعنی بهبود یافته است)
  • PDO که سرنام واژگان PHP Data Objects است

در نسخه های قبلی PHP از افزونه MySQL استفاده می شده، اما استفاده از این افزونه، از 2012 دیگر توصیه نمی شود.


باید از MySQLi استفاده کنم یا PDO ؟

Wiki

اگر بخواهیم خیلی خلاصه جواب دهیم، این انتخاب بستگی به نیاز شما دارد ...!

هر کدام از گزینه های MySQLi و PDO، مزییت های خودشان را دارند.

گزینه PDO با 12 پایگاه داده مختلف کار می کند، اما MySQLi تنها با پایگاه داده MySQL کار خواهد کرد.

بنابراین اگر بخواهید زمانی به یک پایگاه داده دیگر سوییچ کنید، گزینه PDO کار را آسان تر خواهد کرد و فقط کافی است که ارتباط یا connection به پایگاه داده را تغییر دهید و احتمالاً چند تغییر کوچک در کوئری ها را خواهید داشت.

هر دو گزینه شیء گرا هستند، اما MySQLi رویه های API را نیز ارائه می دهد.

هر دو گزینه، دستورات آماده برای مقابله با تزریقات SQL یا SQL injection را پشتیبانی می کنند، که البته این موضوع، برای حفظ امنیت برنامه های کاربردی وب بسیار حیاتی است.


مثال های MySQL به هر دو روش MySQLi و PDO

Wiki

در این مطلب و آموزش های بعدی، سه روش مختلف برای کار کردن با پایگاه داده را نشان خواهیم داد:

  • MySQLi (شیء گرا یا Object-Oriented)
  • MySQLi (رویه ای یا Procedural)
  • PDO

نصب MySQLi

Wiki

برای سیستم عامل Linux و Windows، افزونه MySQLi در اغلب موارد بصورت اتوماتیک بعد از نصب پکیج php5 mysql نصب خواهد شد.

برای کسب اطلاعات بیشتر به لینک روبرو مراجع فرمایید: http://php.net/manual/en/mysqli.installation.php


نصب PDO

Wiki

برای کسب اطلاعات بیشتر به لینک روبرو مراجع فرمایید: http://php.net/manual/en/pdo.installation.php


ارتباط یا Connection به پایگاه داده MySQL

Wiki

قبل از اینکه به داده های پایگاه داده دسترسی داشته باشید، باید یک ارتباط یا Connection تعریف کنید:

مثال   (MySQLi Object-Oriented)

<?php
$servername = "localhost";
$username = "username";
$password = "password";

// Create connection
$conn = new mysqli($servername, $username, $password);

// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
?>
Note توجه داشته باشید که در مثال شیء گرای بالا، connect_error$ تا PHP 5.2.9 و 5.3.0 PHP کار نمی کند، بنابراین اگر می خواهید که کدتان با نسخه های قدیمی PHP نیز سازگار باشد، بجای آن از کد زیر استفاده نمایید:
 // Check connection
if (mysqli_connect_error()) {
    die("Database connection failed: " . mysqli_connect_error());
}

در مثال زیر با استفاده از تابع ()mysqli_connect یک connection به پایگاه داده تعریف شده است:

مثال (MySQLi Procedural)

<?php
$servername = "localhost";
$username = "username";
$password = "password";

// Create connection
$conn = mysqli_connect($servername, $username, $password);

// Check connection
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";
?>

مثال(PDO)

<?php
$servername = "localhost";
$username = "username";
$password = "password";

try {
    $conn = new PDO("mysql:host=$servername;dbname=myDB", $username, $password);
    // set the PDO error mode to exception
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Connected successfully";
    }
catch(PDOException $e)
    {
    echo "Connection failed: " . $e->getMessage();
    }
?>
Note توجه داشته باشید که در مثال PDO بالا، با تنظیم گزینه dbname با مقدار "myDB" نام پایگاه داده را نیز مشخص کرده ایم. اگر PDO موفق به اتصال به پایگاه داده نشود یک استثنا یا exception پرتاب (thrown) می شود.

نکته: یکی از بزرگترین مزیت های PDO وجود کلاس exception برای مدیریت خطاها است. همان طور که می دانید این خطاها ممکن است در کوئری های پایگاه داده رخ دهد و اگر یک استثنا یا exception از داخل بلاک { }try پرتاب (thrown) شود، اجرای اسکریبت متوقف شده و جریان کار به اولین بلاک { }catch منتقل می شود. در واقع استثنای که در قسمت try رخ داده در قسمت catch به دام می افتد.


بستن یک ارتباط

Wiki

ارتباط یا Connection به صورت اتوماتیک وقتی که اسکریبت پایان یافت، بسته می شود، اما اگر مایل باشید می توانید این کار را قبل از پایان اسکریبت انجام دهید:

مثال(MySQLi Object-Oriented)

$conn->close();

مثال(MySQLi Procedural)

mysqli_close($conn);

مثال(PDO)

$conn = null;

برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHP کلیک کنید.

دیدگاه‌ها  

0 # amin 1397-03-24 16:50
سلام دوستان کسی هست بتونه توضیح بده این علامت در جمله زیر یعنی چی؟
$conn->connect_error
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # اسماعیل هاشمی 1397-01-20 13:27
سلام خسته نباشید،
من دقیقا مثال(PDO) رو کپی کردم توی فایل php خودم، اسم دیتا بیس رو با اسم دیتا بیس خودم یکی کردم اما اینمتن تو صفحه ام ظاهر میشه ، باید چکار کنم؟ نمیتونم به دیتابیسم وصل بشم.
setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EX CEPTION); echo "Connected successfully"; } catch(PDOExcept ion $e) { echo "Connection failed: " . $e->getMessage( ); } ?>
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+1 # رضا mmm 1395-03-24 11:12
سلام خسته نباشید
من دقیقا همین کد رو(مثال (MySQLi Procedural)) کپی و داخل یک صفحه جدید htmlبین دو تک body کپی کردم و به اسم conectو با پسوند .phpذخیره کردم
حالا داخل مرورگر این رو سرچ کردم(http://localhost/conection.php)
که این خطا رو داد:Warning: mysqli_connect( ): (HY000/1045): Access denied for user 'username'@'loc alhost' (using password: YES) in C:\xampp\htdocs \conection.php on line 14
Connection failed: Access denied for user 'username'@'loc alhost' (using password: YES)

حالا باید چیکار کنم.
مشابه همین سوال رو خانمی پرسیدن شما فرمودید که باید نام کاربری و دیتابیس رو چک کنید
اما من متوجه نشدم کجا باید این کارو انجام بدم
مرسی از راهنماییتون
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+3 # امیر پهلوان صادق 1395-03-24 14:17
سلام
اشکال کار شما تنظیم ناصحیح متغییرهای زیر است:$servername = "localhost";
$username = "username";
$password = "password";
اما در زیر به توضیح هر کدام از آنها پرداخته ایم:
servername: محل قرار گیری پایگاه داده
username: نام کاربری اتصال به پایگاه داده
password: کلمه عبور اتصال به پایگاه داده
پس رضا جان توجه داشته باش که برای اتصال به پایگاه داده شما نیاز به نام کاربری و کلمه عبور دارید. اما همان طور که می دانید، زمان نصب Xampp پایگاه داده MySQL نیز نصب شده است. اما نکته بسیار مهم این هست که هنگام نصب MySQL یک نام کاربری پیشفرض با نام root و کلمه عبور خالی ایجاد شده است. پس نهایتا سه متغیر بالا باید بصورت زیر مقدار دهی شوند:
$servername = "localhost";
$username = "root";
$password = "";
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+1 # امیرکیان 1395-02-10 18:01
آیا برای دسترسی به دیتابیس به جای تنظیم نمودنmysqli_con nect($servernam e, $username, $password);
مقادیر دیتابس به صورت متغییر
آیا میتوان از ثابت هایی که از اینکلود میشوند به صفحه استفاده کردم؛من کردم نشد؟!
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+2 # مهرداد صلاحی 1395-02-13 12:23
سلام.
بله، امکانش هست. اتفاقا روش صحیح‌تر این هست که برای مقداردهی پارامترهای کلیدی و مهم که مقادیرشون هم در برنامه تغییر نمیکنه، از ثابت استفاده بشه.
شما ابتدا باید ثابت‌ها رو به صورت زیر تعریف کنید:
define('USER', 'db_username');
define('PASS', 'db_password');
define('NAME', 'db_name');


سپس به صورت زیر وصل بشید:
mysqli_con nect(NAME, USER, PASS);

اگر وصل نمیشه احتمالا یه جایی رو اشتباه دارید میکنید. به اینکلود فایل دقت کنید و ابتدا مقادیر رو چاپ کنید تا مطمئن بشید که مقادیر قابل دسترسی هستند یا خیر. با تریس برنامه می‌تونید مشکل رو پیدا کنید.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+1 # محسن 51 1395-01-11 15:44
من کد ها رو دقیقا مشابه آموزش ها وارد میکنم حتی با یوزر و دیتا بیس جدید هم امتحان کردم اما باز هم ارور فاتال میده و دیتابیس رو پیدا نمی کنه اگه کسی میتونه لطفا به من کمک کنه
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+1 # احسان عباسی 1395-01-12 10:32
شما باید مقاله ی بعدی: ایجاد پایگاه داده رو هم بخونید و اجرا کنید. با خواندن و اجرای مقاله ی بعدی، نیازی نیست که به صورت دستی پایگاه داده رو ایجاد کنید.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+2 # مینا نوبخت 1394-11-24 23:46
ببینید من موقعی که تو لوکال از دیتابیس خودم استفاده می کنم هیچ مشکلی نداره
اما موقعی که سایت خودم رو به سرور انتقال میدم و تنظیمات دیتابیس رو دقیقا مطابق راهنمای سایتی که هاست رو ازش خریداری کردم وارد میکنم صفحات سایتم رو اونایی که با پی اچ پی کار شده به درستی نشون میده اما اون صفحاتی که توشون کد مای اس کیو ال هست رو اصلا نمایش نمیده حتی وقتی پیج سورس رو هم میزنم میگه این صفحه هیچی توش نیست و ارور سینکتکس در لاین 135 میده

لاین 135 دقیقا جاییه که کد های مربوط به دیتابیس شروع میشه

یک نکته توی آموزش سایتی که هاست رو خریداری کردم گفته آخرش باید فایل configuratiotn php رو تغییر بدیم
اما من این فایل رو ندارم ، در واقع فکر میکنم اون آموزش توی سایت برای سایت های جوملایی باشه اما من با نت بینس نوشتم
در کل اگر برا تون مقدور هستش آموزش انتقال صحیح وبسایت از لوکال به سرور رو بذارید خیلی ممنون
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+1 # مهرداد صلاحی 1394-11-25 08:23
این طور مشکلات رو نمیشه بدون ملاحظه از نزدیک درست کرد. چون من دقیقا نمی‌دونم اونور چه اتفاقاتی داره میفته.
اگر سورس کد رو در هاست دارید، اطلاعات رو بدید یه نگاه بندازم یا اینکه می‌تونیم هماهنگ کنیم مشکل رو از طریق تیم‌ویور حل کنیم.

اما اولش شما ببینید می‌تونید خودتون مشکل رو حل کنید. خط 135 از فایل موردنظر رو چک کنید، ببینید خطای گرامری داره یا نه. درستی‌شو چک کنید و کد رو دوباره اجرا کنید.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # نیما قلیخانی 1394-11-24 20:45
سلام دوست عزیزز من هر چه بالا را میخوانم متوجه نمی شوم شما یه چیز گفتی و کتاب چیز دیگه ای
من با command line دارم کار میکنم این چیزی که شما دارید میگید با نرم افزاره؟ یا چی؟
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # مهرداد صلاحی 1394-11-24 21:15
با سلام.
من متوجه منظور شما نمیشم. دقیقا مشکل شما کدوم قسمت و توی چه محیطی هست. دقیق بگید، تا من و سایر دوستان بهتر بتونیم به شما کمک کنیم.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # مینا نوبخت 1394-10-26 21:26
سلام
این که برای استفاده در کامپیوتر خودمون بود
اگر ممکنه رشته اتصال برای استفاده در سرور سایت رو معرفی کنید
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+1 # مهرداد صلاحی 1394-11-24 21:16
با سلام.
بیشتر توضیح بدید، متوجه منظورتون نمیشم.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
-1 # مینا نوبخت 1394-10-24 19:03
با سلام
مقدار سرور نیم رو بجای لوکال هاست هنگام اجرا در سرور رو چی بذاریم ؟ باید آدرس سایت بذاریم ؟ سینتکسش چه جوریه هر کار میکنم هیچی نشون نمی ده
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+2 # مهرداد صلاحی 1394-11-24 21:17
معمولا تنظیمات هر سایت طوری هست که عبارت localhost برای اشاره به همون به کار میره. شما هم می‌تونید از همین عبارت استفاده کنید.

اگر مشکل حل نشد، بیشتر توضیح بدید، تا بهتر بتونیم کمک کنیم.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
-1 # مینا نوبخت 1394-09-24 02:03
سلام روش صحیح تغییر نام کربری و پسورد رو تو مای اسکیو ال توضیح بیدین ، من نه میتونم ورود کنم نه پسوردم رو تغییر بدم
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+1 # مهرداد صلاحی 1394-09-24 09:36
با سلام.
روشهای مختلفی وجود داره.
میتونید بعد از اینکه اطلاعات رو از کاربر گرفتید و در صورت صحیح بودن آنها، سشن مربوطه رو ست کنید. دقت کنید اعتبار سنجی و صحت اونها رو حتما باید چک کنید و تا زمانی که اطلاعات جدید، درست نبوده، نباید جایگزین اطلاعات قبلی بشه.

بعد از به روزرسانی، سشن رو با مقادیر جدید ست کنید.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
-1 # azadeh ahmadi 1394-08-17 15:58
سلام و خسته نباشید..
من کد شما رو عینا کپی کردم ولی این خطا رو میده...در ضمن از ومپ استفاده میکنم..
Connection failed: Access denied for user 'username'@'loc alhost'(using password: YES)
میشه بگید مشکل از کجاست..
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # مهرداد صلاحی 1394-08-17 16:09
با سلام و تشکر.
دقت داشته باشید عبارت Access denied همیشه بیانگر خطای عدم سطح دسترسی هست.
لطفا نام کاربری و پسورد دیتابیس رو چک کنید که اشتباه نباشه!!!
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # amin 1394-08-09 15:59
ایا می شود جای متغییر هایservername , password,userna meاز یک ثابت با نام های دیگر استفاده کنیم؟
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # مهرداد صلاحی 1394-08-09 16:15
بله!!!
username, password و servername در واقع متغیرهایی هستند که توسط برنامه نویس تعریف میشوند. میشه به جای متغیر از ثابت استفاده کرد. مسلم هست که این ثابتها رو باید قبلا در برنامه تعریف و به فایل موردنظر وصل کرده باشید، تا در فایل موردنظر این مقادیر این ثابتها خوانده شوند.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # amin 1394-08-09 17:11
میشه مثلا بجای استفاده از کلمه پسورد برای تعریف رمز عبور از کلمه رمز عبور استفاده کنیم اما ترتیب رعایت کنیم؟
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # مهرداد صلاحی 1394-08-09 19:57
سؤالتون واضح نیست!!!
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # amin 1394-08-09 20:35
بجای استفاده از $password" = password";از $کلمه دیگر ="password"; استفاده کنیم
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # مهرداد صلاحی 1394-08-09 20:50
بله! هیچ اشکالی نداره.
اینجا صرفا جنبه‌ی آموزشی داره و برای فهم بیشتر از این کلمه استفاده شده.
در دنیای واقعی اتفاقا باید از کلمات دیگه و خیلی سخت برای پسورد استفاده کنید که حدس زدنش برای دیگران راحت نباشه.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # amin 1394-08-09 23:39
منظورم نام متغییر نه محتوا و رمز
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # مهرداد صلاحی 1394-08-10 06:57
بله!
هر کدوم رو که تغییر بدید، مانعی نداره. فقط ترتیب رو رعایت کنید.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # hossein007 1394-06-20 16:56
کسی میدونه این اررور چی مدخواد؟؟؟؟

Warning: mysql_num_rows( ) expects parameter 1 to be resource, boolean given in ...
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # شهربانو دوستی 1394-06-20 22:15
با سلام
کوئری شما خطا داشته. mysql_error رو چاپ کنید ببینید مشکل از چیه. همچنین میتونید از
die(mysql_error () ) استفاده کنید.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # Mr.meshki 1394-06-20 03:08
سلام
میگم من از نرم افزار wamp server استفاده میکنم بعد وقتی می خوام ارتباط وصل کنم این Error میده
Connection failed: Access denied for user 'username'@'loc alhost' (using password: YES)
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # شهربانو دوستی 1394-06-20 14:50
با سلام
اگر دقت کنید هنگام اتصال ازتون پس ورد میخواد با اینکه شما پس وردی برا اتصال در نظر نگرفتید. این خطا به خاطر این اتفاق میوفته که در هنگام نوشتن کد اتصال برای قسمت پس ورد بین دو کوتیشن یک فاصله قرار میدید و سیستم اینو یه پس ورد در نظر میگیره ، پس برای رفع این مشکل برای قسمت پس ورد دابل کوتیشن ها رو بدون فاصله قرار بدید.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # azam100 1394-05-28 19:38
سلام
بعد از اینکه فرم را درست کردیم ارتباط با پایگاه داده را هم برقرار کردیم چگونه اطلاعاتی را از فرم به پایگاه داده وارد کنیم میشه در همین قسمت یک نمونه بگدارید
در مثال های بالا شما فقط طریقه ارتباط با پایگاه داده را فرمودید اما اینکه چگونه اطلاعاتی را که از کاربر از طریق فرم می گیریم به پایگاه داده وارد کنیم چیزی نگفتید.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # شهربانو دوستی 1394-06-03 14:02
باسلام
به آموزش " آموزش MySQL-دستور Insert " مراجعه کنید.

www.beyamooz.com/php/97-database/116-%D8%AF%D8%B1%D8%AC-%D8%A7%D8%B7%D9%84%D8%A7%D8%B9%D8%A7%D8%AA-%D8%AF%D8%B1-php
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # mohsen moardi 1393-11-05 10:47
ببخشيد من كد ها رو براي ايجاد پايگاه داده درست مثل شما وارد ميكنم اما وصل نميشه...اين ارور رو ميده:
Connection failed: Access denied for user 'username'@'loc alhost'(using password: YES)ميشه راهنمايي كنيد ك اشكال از كجاست؟
درضمن من xampp رو فقط نصب كردم.... با نصب xampp باز هم براي ايجاد پايگاه داده بايد برنامه ي ديگه اي هم نصب شه؟
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # امیر پهلوان صادق 1393-11-05 14:33
زمانی که بسته xampp را نصب می کنید، پایگاه داده MySQL نیز نصب می شود و بصورت پیش فرض یک user با نام root و کلمه عبور خالی نیز تعریف می شود.
بنابراین برای ارتباط با پایگاه داده username را با مقدار "root" و password را خالی تنظیم نمایید.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+2 # ali ym 1393-09-21 18:22
امروزه استفاده از روش pdo به عنوان یک روش مفیدتر شناخته میشه
این مورد چند دلیل داره
یک.شی گرایی بودن و کلاس ها
دو.امنیت بیشتر در ثبت اطلاعات.
سه . عدم وابستگی به mysql .قابلیت اتصال به چندین منبع داده رو بااستفاده از رشته اتصال داره.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن

آموزش صوتی PHP

بستن
مدرس:
سوال و جواب:

ابزاری که در پیش روی دارید یکی از ابزارهای بسیار کاربردی سایت بیاموز در زمینه آموزش است، این ابزار برای سهولت یادگیری شما کاربران محترم طراحی شده است.

فقط کافی است روی عنوان پاراگراف مورد نظرتان کلیک کنید تا پخش صدا آغاز شود ...!

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