دستور select در PHP
انتخاب داده ها از پایگاه داده MySQL
دستور SELECT برای انتخاب داده از یک جدول استفاده می شود.
نحوه استفاده:
می توانیم با استفاده از نام ستون ها، تعداد محدودی از ستون های یک جدول را انتخاب کنیم:
یا می توانیم با استفاده از کاراکتر *، تمام ستون های یک جدول را انتخاب کنیم:
برای کسب اطلاعات بیشتر در مورد SQL، به لینک روبرو مراجعه فرمایید: آموزش SQL-مقدمه
انتخاب داده ها با استفاده از MySQLi
در مثال زیر، ستون های id و firstname و lastname از جدول MyGuests در صفحه نمایش داده خواهند شد:
مثال(MySQLi Object-oriented)
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// ارتباط به پایگاه داده
$conn = new mysqli($servername, $username, $password, $dbname);
// مطمئن شدن از صحت ارتباط
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
//تنظیم کوئری
$sql = "SELECT id, firstname, lastname FROM MyGuests";
//اجرای کوئری و قرار دادن نتیجه در متغیر
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// نمایش داده ها به ازای هر ردیف
while($row = $result->fetch_assoc()) {
echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
}
} else {
echo "0 results";
}
//بستن ارتباط با پایگاه داده
$conn->close();
?>
خروجی کد بالا:
id: 2 - Name: Mary Moe
id: 3 - Name: Julie Dooley
توضیح مثال:
- ابتدا یک کوئری SQL را تنظیم کردیم که ستون های id و firstname و lastname از جدول MyGuests را انتخاب می کند. نتیجه اجرای کوئری توسط تابع ()query در متغیر result$ ذخیره می شود.
- حالا نتیجه کوئری در متغیر result$ است و می خواهیم که آنها را در خروجی نمایش دهیم، اما قبل از آن باید مطمئن شویم که کوئری ما نتیجه ای را در بر داشته است، بنابراین با استفاده از تابع ()num_rows چک می کنیم که ردیف ها بزرگتر از صفر باشد.
- با استفاده از تابع ()fetch_assoc ردیف اول داده ها برگردانده می شود، در یک اسکریبت با هر بار فراخوانی این تابع ردیف های بعدی بر می گردد.
- با استفاده از حلقه while و با هر بار فراخوانی تابع ()fetch_assoc نتیجه در متغیر row$ ذخیره می شود و این کار تا آخرین رکورد ادامه می یابد و اطلاعات ستون ها چاپ می شود.
در مثال زیر نیز با استفاده از روش MySQLi procedural ستون های id و firstname و lastname از جدول MyGuests در صفحه نمایش داده خواهند شد:
مثال(MySQLi Procedural)
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// ایجاد ارتباط با پایگاه داده
$conn = mysqli_connect($servername, $username, $password, $dbname);
// اطمینان از صحت ارتباط
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
//تنظیم کوئری
$sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = mysqli_query($conn, $sql);
if (mysqli_num_rows($result) > 0) {
// نمایش داده ها به ازای هر ردیف
while($row = mysqli_fetch_assoc($result)) {
echo "id: " . $row["id"]. " - Name: " . $row["firstname"]. " " . $row["lastname"]. "<br>";
}
} else {
echo "0 results";
}
mysqli_close($conn);
?>
خروجی کد بالا:
id: 2 - Name: Mary Moe
id: 3 - Name: Julie Dooley
همچنین می توانید خروجی را در یک جدول HTML نمایش دهید:
مثال(MySQLi Object-oriented)
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// ایجاد ارتباط با پایگاه داده
$conn = new mysqli($servername, $username, $password, $dbname);
// اطمینان از صحت ارتباط
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
//تنظیم کوئری
$sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
echo "<table><tr><th>ID</th><th>Name</th></tr>";
// نمایش داده ها به ازای هر ردیف
while($row = $result->fetch_assoc()) {
echo "<tr><td>".$row["id"]."</td><td>".$row["firstname"]." ".$row["lastname"]."</td></tr>";
}
echo "</table>";
} else {
echo "0 results";
}
$conn->close();
?>
خروجی کد بالا، البته با استایل زیر:
table, th, td {
border: 1px solid black;
}
</style>
خروجی:
ID | Name |
---|---|
1 | John Doe |
2 | Mary Moe |
3 | Julie Dooley |
انتخاب داده ها با استفاده از PDO + دستورات آماده
در مثال زیر، از دستورات آماده (prepared statements) استفاده شده است.
در مثال زیر نیز با استفاده از روش PDO ستون های id و firstname و lastname از جدول MyGuests در یک جدول HTMLی نمایش داده خواهند شد:
مثال(PDO)
echo "<table style='border: solid 1px black;'>";
echo "<tr><th>Id</th><th>Firstname</th><th>Lastname</th></tr>";
class TableRows extends RecursiveIteratorIterator {
function __construct($it) {
parent::__construct($it, self::LEAVES_ONLY);
}
function current() {
return "<td style='width:150px;border:1px solid black;'>" . parent::current(). "</td>";
}
function beginChildren() {
echo "<tr>";
}
function endChildren() {
echo "</tr>" . "\n";
}
}
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDBPDO";
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare("SELECT id, firstname, lastname FROM MyGuests");
$stmt->execute();
// set the resulting array to associative
$result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as $k=>$v) {
echo $v;
}
}
catch(PDOException $e) {
echo "Error: " . $e->getMessage();
}
$conn = null;
echo "</table>";
?>
خروجی کد بالا:
Id | Firstname | Lastname |
---|---|---|
1 | John | Doe |
2 | Mary | Moe |
3 | Julie | Dooley |
برای مشاهده فیلم ها و آموزش های پروژه محور برنامه نویسی PHP کلیک کنید.
- نوشته شده توسط امیر پهلوان صادق
- بازدید: 34744
دیدگاهها
سلام من یه جدول دارم میخام آیدی یه فیلدو بدم فقط اسمشو برامنقل قول:
برگردونه اما هر نمیتونم با اون result چاپش کنم میشه راهنماییم کنید.مثلا فرض کنید یک جدول person آیدیشو میخام بدم و یک اسم برام برگردونه نقل قول: فقط میخام اسمو چاپ کنم
سلام در روش شی گرایی متغیر $result که رکوردست می باشد را درک نمی کنم که چه نوعی است.؟
وقتی که یک جدولی را با دستور سلکت انتخاب کردیم و هر سطر را به صورت یک آرایه ی انجمی برگرداندیم؛
خواستم بدانم چطور میشود هر سطر را به صورت یک آرایه عددی برگشت داد؟
سؤالتون دقیق نیست.
ولی به نظرم با تابع mysql_assoc_fet ch و mysql_array_fet ch بتونید کار موردنظر رو انجام بدید.
سؤالتون رو بیشتر توضیح بدید، تا دقیق بتونم بگم چطوری میشه انجامش داد.
سلام
دستورات php مثل خود تگ php را در بانک ذخیره میکنم ولی هنگام چاپ نمایش نمیده .
ممنون میشم اگه راههنمایی کنید
سلام.
اگه کد بذارید، بهتره! ولی برای ذخیره دستورات php در دیتابیس بهتره، اون رو کد کنید یا اینکه اون رو داخل دابلکوتیشن بذارید و بعد ذخیره کنید.
سلام اگه ممکنه در مورد این خط یه توضیح مفید بدین
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EX CEPTION);
با سلام.
برای توضیح باید شما تا حدودی به مفاهیم کلاس و شئگرایی مسلط باشید. خیلی ساده بگم، این خط تنظیمات خطا رو برای کار با این پایگاه داده و شی مذکور ست میکنه.
سلام
توی روش PDO میشه قسمت اول برنامه رو بیشتر توضیح بدین ؟
شما یه کلاس تشکیل دادین و ارث بری کردین و بعد تابع سازنده تعریف کردین !
ولی من اون قسمت رو متوجه نشدم که چرا اینطور نوشتین ! ممنون میشم بیشتر توضیح بدین :)
با تشکر از سایت خوبتون
با سلام.
توسط این کلاس آبجکت گرفته میشه و تبدیل به آرایه میشه. اگر دقت کنید در حلقه foreach از کلاس مربوطه استفاده شده که خروجی اون یه آرایه هست و این آرایه در حلقه استفاده میشه.
سلام.من يه ديتابيسي ساختم كه كالكشنش utf8-persian-ci هست...وقتي ميخوام داده هاي فارسي رو از يكي از جدول ها بگيرم به صورت علامت سوال ميان...بايد چيكار كنم؟البته من كد ها رو با utf8 سيو كردم اما بازم با علامت سوال نشون ميده....بايد موقع اتصال به ديتابيس كد خاصي وارد كنم؟از روش MySQLi Procedural هم استفاده كردم
شما باید با بلافاصله بعد از متصل شدن به دیتابیس دقیقا بعد از دستور mysql_select_db این کد رو بنویسید:
mysql_query("SET NAMES 'UTF8'");
نباید مشکل خاصی پیش بیاد ولی با این حال با utf8_general_ci هم تست کنید.
سلام...تو مثالي كه اطلاعات به صورت جدول نشون داده ميشن فرض كنيد بخوايم تو هر رديف يك دكمه اي قرار بديم كه با زدن اون دكمه بشه اطلاعات اون رديف رو تو ديتابيس دستكاري كرد..مثلا با زدن دكمه اطلاعات اون رديف پاك بشه ..بايد چطور اين كارو كرد؟
سلام، این مورد در پروژه رزرو هتل به خوبی پیاده شده است.
www.beyamooz.com/php/339-project-hotel/2594
اگر تصور کنید اطلاعات را در یک جدول نمایش می دهید، به ازای ستون آخر باید بصورت زیر عمل کنید:
echo "<td>< a href='all_user. php?delete_by_u_id=$u_id&action=delete' onclick='return confirm(\"آيا اطلاعات حذف شود؟\");'>حذف</a></td>";
همان طور که در کد بالا مشاهده می کنید، با استفاده از متد get، پارامتر "delete_by_u_id " که شامل ID ردیف مورد نظر است را به سرور ارسال کرده ایم ... در ادامه با استفاده از ID، ردیف حذف خواهد شد.
سلام....all_use r.php آدرس صفحه اي هست كه id بهش فرستاده ميشه؟ يكم پيچيدست....ميشه يكم بيشتر توضيح بديد؟
اگر به پنل مدیریتی پروژه رزرو هتل مراجعه کنید (www.beyamooz.com/demo/beyamooz-hotel/admin/all_reserve.php) و بعنوان مثال به قسمت "مدیریت کاربران" مراجعه کنید، خواهید دید که دو ستون آخر شامل لینک های "حذف" و "ویرایش" است. حالا اگر از مرورگر FireFox استفاده می کنید. روی کلمه ی حذف، راست کلیک کرده و گزینه ی "Inspect Element" را انتخاب نمایید. بدین ترتیب در پایین صفحه، کد HTML مربوط به لینک "حذف" نمایش داده می شود.
همان طور که در "Comment" قبلی هم ذکر شد، ویژگی href مربوط به لینک "حذف" بصورت زیر مقدار دهی شده است:href='all_user. php?delete_by_u _id=$u_id&actio n=delete' بنابراین زمانی که کاربر روی لینک "حذف" کلیک می کند، فایل "all_user.php" اجرا خواهد شد، اما توجه داشته باشید که دو پارامتر زیر نیز همراه با درخواست ما به سرور ارسال می شود:
1- delete_by_u_id : شامل ID یا شناسه ردیف است
2- action : این پارامتر، عملی که می خواهیم انجام دهیم، را مشخص می کند. بعنوان مثال برای لینک "ویرایش" این پارامتر با مقدار Update مقدار دهی شده است.
پس تا اینجا، ID و نوع عمل مشخص شد، تنها کافی است این مقادیر را سمت سرور دریافت کرده و عملیات مورد نظر را انجام دهیم.
ببخشيد دستور بالا مربوط به كدوم قسمت از php هست؟من اين دستور رو ياد گرفتم ولي اگه بخوام بيشتر بدونم راجبش بايد تو كدوم قسمت سايت بگردم؟
منظورتون کدام دستور است؟
همين دستوري كه تو قسمت href لينك بالا وارد كرديد...ميخواست م بيشتر بدونم راجبش اما نميدونم كدوم قسمت سايت هست
آهان، توجه کنید زمانی که کاربر روی لینک "حذف" کلیک می کند آدرسی که در قسمت href تنظیم شده است اجرا خواهد شد. یعنی فایل all_user.php اجرا می شود.
اما نکته ی بسیار مهم در اینجا این است که، زمانی که درخواست اجرای all_user.php به سرور ارسال می شود، همزمان دو متغییر delete_by_u_id و action نیز ارسال خواهد شد.
به این روش ارسال متغییر get گفته می شود.
روش کار بسیار ساده است، یعنی برای ارسال پارامتر از این طریق به سرور باید بلافاصله بعد از نام فایل یک علامت سوال (؟) گذاشته و بعد نام پارامتر را ذکر کنید و بعد علامت مساوی (=) و نهایتاً مقدار پارامتر
نکته: اگر تعداد پارامترهای بیشتر از یکی است، باید بین هر پارامتر از علامت & استفاده کنید.<a href="/all_user. php?param_name01=Value01¶m_name02=Value02" >
بسيار سپاسگزارم...ممن ون بابت توضيح كامل شما
سلام و خسته نباشيد....ميشه راجبه قسمتي ك while گذاشتيد و شرط داخلش كمي توضيح بديد؟تو مثال
Procedural در قسمت شرط نوشتيد:$result = mysqli_query($c onn, $sql);
if (mysqli_num_row s($result) > 0) {
while($row = mysqli_fetch_as soc($result)) {
echo "id: " . $row["id"]. " - Name: " . $row["firstname "]. " " . $row["lastname" ]. "";
}
}
درحالي ك $row قبلا تعريف نشده...سيستم چطور id هارو دونه ب دونه ميگيره و اطلاعاش رو چاپ ميكنه؟
خط 1: نتیجه اجرای کوئری در متغییر result$ قرار می گیرد.
خط 2: اگر تعداد ردیف های برگشتی بزرگتر از صفر بود، حلقه داخل if اجرا خواهد شد.
خط 3: هر بار که حلقه اجرا می شود، با استفاده از متد ()mysqli_fetch_ as soc یکی از ردیف ها داخل متغییر row$ قرار می گیرد.
سلام من میخوام یک جدول از پایگاه دادم بخونم و نمایش بدم این خطارومیده.در صورتیکه در sql درج میشه.
Fatal error: Call to a member function fetch_array() on a non-object in C:\xampp\htdocs \viewpage.php on line 36
سلام، حتماً به سایت www.php.net برید و متد ()fetch_array رو جستجو کنید، اطلاعات خوبی در اختیارتون قرار خواهد گرفت.
بله مشکلم برطرف شد ممنون.
سلام . واقعا ممنون .خیلی مفید بود