parsgreen.com
article

آشنایی با mysql_query در php و دیتابیس

mysql-query

تا این مرحله از آموزش مقدماتی کار با php و MySQL، دیدیم که چگونه می توان به کمک دستورات php، دیتابیس، جدول و ردیف ساخت و اطلاعات را در آنها ذخیره نمود، همان طور که در مثال های گذشته اشاره شد، تابع mysql_query، یکی از پرکاربرد ترین توابعی است که در کار با پایگاه داده با آن سر و کار داریم، این تابع به صورت پیش فرض در مفسر php وجود دارد و با پارامترهای آن می توان به راحتی موارد مورد نیاز و منظور خود را به سیستم انتقال داد، در این مطلب می خواهیم نگاهی اجمالی داشته باشیم به نحوه انتخاب و نمایش مطالب از دیتابیس به کمک تابع mysql_query و بحث تفضیلی را به آموزش های بعدی موکول می کنیم.

انتخاب اطلاعات از دیتابیس با php و mysql


در کار با سیستم مدیریت پایگاه داده، انتخاب اطلاعات از دیتابیس امری عادی و پرکاربرد است، مثلا اگر بخواهید مطالب خود را به کاربران نشان دهید، باید آنها را از دیتابیس انتخاب و به صفحه مرورگر انتقال دهید، این کار در php و mysql به کمک عنصری به نام SELECT انجام می شود، به همراه این عنصر، باید از FROM نیز استفاده کنیم، به اینصورت به سیستم خواهیم گفت که ما قصد انتخاب از چه جدولی را داریم، برای مثال کد زیر شیوه نگارش یک درخواست از پایگاه داده به کمک SELECT و FROM را نشان می دهید.
<?php 
mysql_connect("localhost", "user", "pass")//اطلاعات اتصال
or die(mysql_error());

mysql_select_db("db")//نام دیتابیس
or die(mysql_error());

mysql_query("SELECT * FROM table")//انتخاب از جدول
or die(mysql_error());

mysql_close;//پایان ارتباط
?>

خروجی اطلاعات از دیتابیس با php و mysql


برای اینکه بتوانیم اطلاعات ارسالی از دیتابیس را در کد php خروجی دهیم به تابع mysql_fetch_array نیاز داریم، ردیف های (سطرهای) انتخاب شده با SELECT و FROM به کمک mysql_fetch_array به صورت آرایه ای از اطلاعات درمی آیند که می توان با شیوه نگارشی زیر از آنها خروجی گرفت.
<?php 
mysql_connect("localhost", "user", "pass")//اطلاعات اتصال
or die(mysql_error());

mysql_select_db("db")//نام دیتابیس
or die(mysql_error());

$result = mysql_query("SELECT * FROM table")//انتخاب از جدول
or die(mysql_error());
$row = mysql_fetch_array($result);
echo "نام: ".$row['name'];
echo " فامیل: ".$row['family'];

mysql_close;//پایان ارتباط
?>
در مثال بالا از جدولی فرضی با دو ردیف (ستون) نام و نام خانوادگی، اطلاعات را انتخاب و خروجی داده ایم، درک نحوه کارکرد mysql_fetch_array چندان سخت نیست (در بحث های آینده در این خصوص بیشتر خواهیم گفت)، به طور ساده این تابع اطلاعات ردیف ها را بر اساس SELECT * FROM در خود نگهداری می کند و با متغیر row (عنوانی دلخواه است)، با توجه به مقادیر داخل [] خروجی می دهد.
اگر موضوع به نظر پیچیده می رسد، عجله نکنید!، این یادداشت صرفا مقدمه ای بود تا شما را با کلیات کار آشنا کند، در آموزش های بعدی با جزئیات بیشتری خواهیم دید که چگونه می توان اطلاعات را از دیتابیس انتخاب و خروجی گرفت.
sectionدسته بندی: آموزش مقدماتی » MySQL
related مطالب بیشتر:
» نحوه ذخیره کردن اطلاعات با دستور INSERT در MySQL
» نگاهی به MySQL، پرکاربردترین سیستم مدیریت پایگاه داده
» نحوه استفاده از WHERE در MySQL
» استفاده از ORDER و GROUP در MySQL
» حذف مقادیر از MySQL با دستور DELETE
commentنظرات (۳۹ یادداشت برای این مطلب ارسال شده است)
نویسنده: ناصر
زمان: ۲۱:۲۲:۰۸ - تاریخ: ۱۳۹۱/۱۱/۱۸
دستتون درد نکنه وب سایتتون عالیه یعنی خیلی عالیه .
خسته نباشید.
نویسنده: مهدی
زمان: ۱۹:۵۰:۴۴ - تاریخ: ۱۳۹۲/۰۳/۱۶
با سلام
چطور میشه یه لینکی باشه (مثل عکس یا نوشته مانند "افزایش") که وقتی روش کلیک میکنیم از دیتابیس مانند
mysql_query("select id from user where name='mahdi'")
آی دی رو که یه عدد هست بگیره علاوه یک بکنه بعد همونجا دخیره کنه باز همون صفحه رو بیاره؟
پاسخ: 
سلام
اینکه لینک شما چه چیزی را فراخوانی یا نمایش دهد بستگی به مقصد آن و برنامه شما دارد، اما قسمت دوم سوال یعنی افزودن یک مقدار به یک ردیف در یک پرس و جو را می توان به روش نمونه زیر انجام داد:
mysql_query("UPDATE user SET id = id + 1 WHERE name = 'mahdi' LIMIT 1");
البته باید به دو مورد توجه داشته باشید:
- ستون مورد نظر (در اینجا id) را ترجیحا از نوع INT و بدون قابلیت افزایش خودکار (AUTO INCREMENT) ایجاد کنید.
- مقادیر ستون نباید NULL باشد، حداقل مقادیر صفر را به عنوان پیش فرض تنظیم کنید.
نویسنده: آنا
زمان: ۰۱:۱۵:۲۹ - تاریخ: ۱۳۹۲/۰۴/۰۸
سلام
یه search box دارم که وقتی یه اسمی سرچ می کنم میره از دیتابیس ردیفی که مربوط به اون هست رو میاره.
حالا می خوام همزمان از سرچ اولی که انجام شده مقادیری که برابر با id در دیتابیس هست رو هم بیاره.
مثلا آنا رو سرچ کردم، میاره
ردیف - نام - نام مرتبط 1 - نام مرتبط 2
3 ----- آنا ------- 1 -------------- 5
حالا اول برود و 1=id را نشان دهد چون در نام مرتبط 1 ، مقدار 1 قرار دارد و 5=id را نشان دهد چون در نام مرتبط 2 ، مقدار 5 قرار دارد.
لطفا راهنمایی کنید.
من فقط برای قسمت اول دستور این را نوشته ام :
select * from t1 where name='$nameSearch'
اما برای قسمت دوم نمی دانم.
با تشکر
پاسخ: 
سلام
هرچند پاسخ دقیق به سوال شما نیازمند تست های بیشتر و مشاهده ساختار جداول دیتابیس است، اما با توجه به اطلاعات مطرح شده، الگوی نمونه زیر می تواند این کار را انجام دهد.
<?php
$query_1 = mysql_query("select * from t1 where name='$nameSearch'")
or die(mysql_error());
while($row = mysql_fetch_array($query_1)){
$id_1 = $row['col_name_1'];
$id_2 = $row['col_name_2'];

$query_2 = mysql_query("select * from t1 where id='$id_1' or id='$id_2'")
or die(mysql_error());
while($row = mysql_fetch_array($query_2)){
//استخراج اطلاعات
$id = $row['id'];
//تفکیک اطلاعات در حلقه while
if($id == $id_1){
//نام مرتبط 1
}
elseif($id == $id_2){
//نام مرتبط 2
}
}
}
?>
نویسنده: امیرحسین
زمان: ۱۶:۱۴:۳۷ - تاریخ: ۱۳۹۲/۰۶/۱۰
سلام عزیز خسته نباشی
یه سوال در مورد پایگاه داده
میخوام یک اینپوت درست کنم که توش هر چی تایپ کنی از پایگاه داده تو جدول ها تغییر کنه
مثلا دیتابیس من patoghba_aaaa هست
داخلش یه جدولی به نام test هست
داخل جدول test یه ستون به نام shahr هست
میخوام درون اینپوت هرچی وارد کنم تو ستون شهر ثبت بشه در پایگاه داده این کار چگونه هست اینم کد هام ولی درست عمل نکرد لطفا تصحیح کنید بی صبرانه منتظر جوابتون هستم
<form method="post">
<p><input class="btn" type="submit" value="پاک کردن تمامی مهمان های چت روم" name="login_1" /></p>
<input type="submit" value="submit" />
</form>
<?php
@ $con = mysqli_connect("localhost", "patoghba_aaaa", "***********", "patoghba_aaaa") or die('ارتباط با پایگاه داده برقرار نشد');
if(isset($_POST['login_1'])){mysqli_query($con, "edit from test where shahr");}
mysqli_close($con);
?>
پاسخ: 
سلام
کدهای شما کامل نیست، باید از INSERT در MySQL برای ورود اطلاعات و UPDATE برای به روزرسانی آنها استفاده کنید، مثال:
<form method="post">
<p><input class="btn" type="text" value="پاک کردن تمامی مهمان های چت روم" name="login_1" /></p>
<input type="submit" value="submit" />
</form>
<?php
@$con = mysqli_connect("localhost", "patoghba_aaaa", "***********", "patoghba_aaaa")
or die('ارتباط با پایگاه داده برقرار نشد');
mysqli_select_db($con, "patoghba_aaaa");
if(isset($_POST['login_1'])){
$login_1 = $_POST['login_1'];
mysqli_query("INSERT INTO test VALUES('$login_1')");
}
mysqli_close($con);
?>
نکته: چند ایراد دیگر نیز در کدهای شما وجود دارد که با مقایسه دو کد متوجه خواهید شد.
نویسنده: امیرحسین
زمان: ۲۲:۵۴:۵۶ - تاریخ: ۱۳۹۲/۰۶/۱۰
سلام
ببخشید من چیزی نفهمیدم اگه ممکنه این صفحه رو ببینید
http://patoghbaz.ir/top.php
میخوام این امکان رو بهش اضافه کنم
دو تا input با یه دکمه سابمیت و درون تگ form باشه
در فایل اینپوت اولی ای دی کاربر رو وارد کنی بعد در کادر دومی امتیاز رو وقتی دکمه رو زدی امتیازش ویرایش بشه
این کار رو از تو هاست پی اچ پی مای ادمین میشه انجام داد ولی میخوام با برنامه نویسیش کار راحت تر بشه
تو پی اچ پی مای ادمین
یه table هست به نام db1_etchat_user
درون اون یه ستون هست به نام user_id که کد کاربری کاربر او نوشته و یه ستون دیگه هم هست به نام emtiyaz که امتیازای کاربرها رو ویرایش می کنی میخوام این امکان رو با کد نویسی کار رو راحت تر کنید که نیازی به هاست نباشه دیگه از همونجا داخل دو تا کادرها یکی ای دی رو وارد کردی و امتیاز و امتیاز کاربر به اونی که وارد کردی تغییر کنه برای وارد کردن ای دی واسه ی شناختن تغییر امتیاز کدوم کاربر کاربرد داشته باشه لطفا منتظرم
پاسخ: 
سلام
دوست گرامی، باید تا حدودی خودتان با مباحث دیتابیس و PHP آشنا باشید تا ما هم در قسمتی کمکتان کنیم، اگر از پیش این آشنایی را داشتید، راهنمایی قبلی ما (استفاده از UPDATE) می توانست مشکلتان را حل کند، لطفا توجه داشته باشید که فرصت ما به اندازه ای نیست که برای همه کاربران کدنویسی کنیم و موارد مقدماتی را توضیح دهیم، به هر صورت، می توانید برای به روزرسانی ردیف ها از نمونه پرس و جوی زیر استفاده کنید:
mysqli_query("UPDATE db1_etchat_user SET emtiyaz = '$new_point' WHERE user_id = '$user_id' LIMIT 1");
مشخص است که امتیاز جدید باید از فیلد input دریافت و به متغیر فرضی new_point نسب داده شود، همچنین شماره id هر کاربر باید به نحوی به کد ارسال شود (به فرض از طریق یک input از نوع hidden) و سپس به متغیر user_id نسبت داده شده و در پرس و جو استفاده شود.
نویسنده: امیرحسین
زمان: ۱۴:۳۱:۲۵ - تاریخ: ۱۳۹۲/۰۶/۱۱
ممنون از لطفی که نسبت به من دارید همینطور که گفتید من عمل کردم نتیجه ای نداد
<form method="post">
<p><input type="text" name="user_id" />آی دی کاربر مورد نظر</p>
<p><input type="text" name="new_point" />امتیاز کاربر</p>
<p><input type="submit" value="ویرایش کن" /></p>
</form>
<?php
$user_id = $_POST['user_id'];
$new_point = $_POST['new_point'];
@ $con = mysqli_connect("localhost", "patoghba_room7", "**********", "patoghba_room7") or die('ارتباط با پایگاه داده برقرار نشد');
@ mysqli_query("UPDATE db1_etchat_user SET emtiyaz = '$new_point' WHERE etchat_user_id = '$user_id' LIMIT 1");
mysqli_close($con);
?>
پاسخ: 
باید ببینید عیب کار از کجا است، به طور مثال در قسمت die می توانید خطای رخ داده را چاپ کنید:
$query = mysqli_query("UPDATE db1_etchat_user SET emtiyaz = '$new_point' WHERE etchat_user_id = '$user_id' LIMIT 1") or die(mysqli_error($query));
این موارد جزء نکات مقدماتی هستند که باید از قبل آشنا باشید، در غیر این صورت در هر مرحله از کار با مشکل جدیدی روبرو می شوید.
نویسنده: مصطفی
زمان: ۱۷:۴۳:۲۵ - تاریخ: ۱۳۹۲/۰۸/۱۴
چطور میشه مقدار یه فیلد رو از پایگاه داده بگیریم و در php چاپ کنیم و یه سوال دیگه ایا میشه با یک ارتباط چندین درخواست رو به پایگاه بفرستیم؟
پاسخ: 
در مورد سوال اول: آموزش فعلی و مطالب منتشر شده در ادامه آن در همین خصوص است!
در مورد سوال دوم: بله، این کاری متداول محسوب می شود.
نویسنده: مصطفی
زمان: ۱۲:۱۰:۱۱ - تاریخ: ۱۳۹۲/۰۸/۲۰
میشه درباره ی تابع mysql_fetch_feild توضیح بدید که چطور میشه مقدار یه فیلد رو باهاش به php بفرستی. ممنون
پاسخ: 
این تابع برای برگرداندن مشخصات (name، table، max_length و...) ستون ها است، برای دریافت مقادیر فیلدها در PHP باید از توابعی مانند mysql_fetch_array استفاده کنید.
نویسنده: مصطفی
زمان: ۱۴:۲۳:۵۱ - تاریخ: ۱۳۹۲/۰۸/۲۰
من مقادیر فیلدها رو با mysql_fetch_object می گیرم ایا اشکالی در این روش هست؟ و اینکه من مقدار یک فیلد رو میخوام نه یه سطر اگه از ارایه استفاده کنم کل سطر بر می گرده
پاسخ: 
استفاده از شیوه object یا array بستگی به سلیقه شما و نوع برنامه نویسی دارد، در عمل نتیجه نهایی خیلی متفاوت نیست، برای محدود کردن نتایج به یک ستون، باید در قسمت SELECT FROM نام ستون مورد نظر را قرار دهید (جداسازی با ,)، مثال:
SELECT id, name FROM tbl
نویسنده: hadi
زمان: ۱۰:۲۳:۳۲ - تاریخ: ۱۳۹۲/۱۰/۱۰
سلام.
من میخوام کار زیر انجام بشه منتهی ارور میده.
DELETE FROM `db`.`posts` WHERE `posts`.`user` = jok limit 3;
دلیلشم به خاطر اینه که user به صورت text هست. وقتی از این کوئری برای id که ورودی اون int هست استفاده میشه به سادگی پاک میکنه.
لطفا راهنمایی کنید من اطلاعات زیادی از کوئری ندارم
پاسخ: 
سلام
در صورتی که خطا از مورد دیگری نباشد، با تغییر عبارت jok به صورت 'jok' مشکل رفع خواهد شد.
نویسنده: سارا
زمان: ۱۱:۲۹:۱۸ - تاریخ: ۱۳۹۲/۱۱/۱۷
سلام
من اطلاعات را از دیتابیس دریافت می کنم ولی به صورت کد شده هستند باید چی کار کنم که کد شده نباشه ؟ و چطوری اطلاعات را در قسمت body نشان بدهم ، چون اطلاعات را در اول صفحه یعنی قبل از header نشان می دهد؟ با تشکر از مطالب خوبتون
پاسخ: 
سلام
در مورد کد شده بودن اطلاعات، نیاز به بررسی بیشتر دارد، احتمالا به درستی از یونیکد UTF-8 در هنگام ذخیره یا بازسازی اطلاعات و یا ساخت جداول و ستون های دیتابیس و یا حتی ارتباط با دیتابیس استفاده نکرده اید، اما در مورد نحوه خروجی گرفتن، این یک مبحث مقدماتی ساده است، اما باید به آموزش های مقدماتی PHP مراجعه کنید (توضیح خاصی نمی توان در این قسمت ارائه کرد، باید به صورت کلی این موارد را از ابتدا مطالعه کنید).
نویسنده: مجید
زمان: ۱۱:۴۰:۵۲ - تاریخ: ۱۳۹۲/۱۱/۲۵
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'table' at line 1

مثال شما را اجرا کردم این خطا میده
پاسخ: 
در هنگام تست باید اطلاعات اتصال را تعریف و به جای table عنوان جدول مورد نظرتان را قرار دهید، در صورتی که با انجام این کار باز خطا دریافت کردید، لطفا یک نمونه از کدهایتان را درج کنید تا بررسی کنیم.
نویسنده: مصطفی
زمان: ۱۹:۰۳:۲۱ - تاریخ: ۱۳۹۳/۰۲/۰۱
سلام ببخشید اگه درخواستی که ما به پایگاه داده میفرستیم چندین سطر رو برگردونه چطور باید این سطرها رو echo کنیم
پاسخ: 
سلام
لطفا آموزش بعدی از این قسمت را مطالعه کنید، با استفاده از حلقه while می توان در نتایج دریافتی که به صورت آرایه است به اصطلاح دور زد.
نویسنده: ehsan
زمان: ۱۸:۵۲:۳۰ - تاریخ: ۱۳۹۳/۰۲/۱۰
عالییییییی بود
نویسنده: مصطفی
زمان: ۱۷:۵۶:۱۷ - تاریخ: ۱۳۹۳/۰۲/۳۰
سلام من میخواستم فیلد پیام درست کنم که هم بشه توش فارسی تایپ کرد هم انگلیسی فرمت فیلد رو باید چی بزارم؟ یه سوال دیگه اینکه میخوام برای این فیلدها از عبارات با قائده استفاده کنم تا بعضی کلمات سانسور بشه ایا بهتره با php این کار رو بکنم یا با خود mysql؟
با تشکر
پاسخ: 
سلام
نوع فیلد دیتابیس بستگی به تعداد کاراکتری دارد که باید در آن وارد شود، برای پیام معمولا نوع TEXT کافی خواهد بود، اما برای پشتیبانی فارسی باید از Collation utf8_persian_ci استفاده کنید (در این مورد در وب جستجو کنید)، در مورد استفاده از عبارات با قاعده، همان طور که در سوال دیگر شما (در مطلبی دیگر) گفتیم، بهتر است این نوع کارها در کدنویسی PHP انجام شوند.
paged صفحه 1 از 3




more لطفا دقت کنید که یادداشت های زیر منتشر نشده و حذف خواهند شد:
- یادداشت های خارج از موضوع این مطلب.
- سوالات کلی، غیر ضروری و مشکلاتی که هیچ تلاشی برای رفع آن نکرده باشید.
- نظرات حاوی کدها و اسکریپت های خیلی طولانی (به طور مثال کد کامل قالب وبلاگ).

4 × 5
 refresh
آگهی
seonab.com
طراحی نرم افزار اندروید
رنگین کمان عکس
Ranginkamaan.com

آرشیو عکس های باکیفیت با موضوعات متنوع...