شرط Where (MySQL Where)
در «شرط WHERE»، رکوردها را فیلتر می کنیم. «شرط (Condition)» یعنی قانونی برای انتخاب سطرها. مثل فیلتر پیام ها در موبایل. حالا با مثال های منبع جلو می رویم.
الگوی ساده WHERE
ابتدا الگوی پایه را ببین. سپس با مثال های PHP تمرین کن.
SELECT column_name(s)
FROM table_name
WHERE column_name operator value;
MySQLi شی گرا + WHERE
اینجا فقط فامیل "Doe" را نمایش می دهیم. سپس نتیجه را چاپ می کنیم.
<?php
$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 WHERE lastname='Doe'";
$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();
?>
MySQLi رویه ای + WHERE
همان کار را این بار با سبک رویه ای انجام می دهیم.
<?php
$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 WHERE lastname='Doe'";
$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);
?>
خروجی جدول HTML (MySQLi)
می توانیم خروجی را در جدول HTML چاپ کنیم.
<?php
$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 WHERE lastname='Doe'";
$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();
?>
PDO + Prepared (با WHERE)
در PDO از «دستورات آماده (Prepared)» استفاده می کنیم. سپس جدول را چاپ می کنیم.
<?php
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 WHERE lastname='Doe'");
$stmt->execute();
$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>";
?>
گام های عملی
- اتصال بساز و خطا را چک کن.
- SELECT با WHERE بنویس و اجرا کن.
- نتیجه را پیمایش و چاپ کن.
نکته: اگر ورودی کاربر داری، از Prepared استفاده کن تا امن بمانی.
منابع و ادامه مسیر
- انتخاب داده MySQL مرجع کلی SELECT.
- شرط WHERE همین صفحه برای تمرین بیشتر.
- مرتب سازی با ORDER BY مرحله بعد.
جمع بندی سریع
- WHERE داده ها را فیلتر می کند.
- عبارت شرطی کنار SELECT می آید.
- در PDO از Prepared کمک بگیر.
- خروجی را می توان جدول کرد.