สอบถามข้องใจมานานครับ เกี่ยวกับ SQL Where 1 หรือ 1=1 คืออะไรครับ
ใช้ในกรณีเราต้องการต่อ String ของ SQL Statement ครับ
Code (PHP)
$strSQL = "SELECT * FROM customer WHERE 1 ";
if($_POST["ddlCountryCode"] != "")
{
$strSQL .= " AND (CountryCode = '".$_POST["ddlCountryCode"]."') ";
}
if($_POST["txtKeyword"] != "")
{
$strSQL .= " AND (Name LIKE '%".$_POST["txtKeyword"]."%' or Email LIKE '%".$_POST["txtKeyword"]."%' ) ";
}
Code เต็ม ๆ
Code (PHP)
<html>
<head>
<title>ThaiCreate.Com PHP & MySQL Tutorial</title>
</head>
<body>
<form name="frmSearch" method="post" action="<?=$_SERVER['SCRIPT_NAME'];?>">
<table width="599" border="1">
<tr>
<th>Country Code
<select name="ddlCountryCode" id="ddlCountryCode">
<option>- Select Country Code -</option>
<option value="TH">TH</option>
<option value="EN">EN</option>
<option value="US">US</option>
</select>
Keyword
<input name="txtKeyword" type="text" id="txtKeyword" value="<?=$_POST["txtKeyword"];?>">
<input type="submit" value="Search"></th>
</tr>
</table>
</form>
<?
$objConnect = mysql_connect("localhost","root","root") or die("Error Connect to Database");
$objDB = mysql_select_db("mydatabase");
// Search By Name or Email
$strSQL = "SELECT * FROM customer WHERE 1 ";
if($_POST["ddlCountryCode"] != "")
{
$strSQL .= " AND (CountryCode = '".$_POST["ddlCountryCode"]."') ";
}
if($_POST["txtKeyword"] != "")
{
$strSQL .= " AND (Name LIKE '%".$_POST["txtKeyword"]."%' or Email LIKE '%".$_POST["txtKeyword"]."%' ) ";
}
$objQuery = mysql_query($strSQL) or die ("Error Query [".$strSQL."]");
?>
<table width="600" border="1">
<tr>
<th width="91"> <div align="center">CustomerID </div></th>
<th width="98"> <div align="center">Name </div></th>
<th width="198"> <div align="center">Email </div></th>
<th width="97"> <div align="center">CountryCode </div></th>
<th width="59"> <div align="center">Budget </div></th>
<th width="71"> <div align="center">Used </div></th>
</tr>
<?
while($objResult = mysql_fetch_array($objQuery))
{
?>
<tr>
<td><div align="center"><?=$objResult["CustomerID"];?></div></td>
<td><?=$objResult["Name"];?></td>
<td><?=$objResult["Email"];?></td>
<td><div align="center"><?=$objResult["CountryCode"];?></div></td>
<td align="right"><?=$objResult["Budget"];?></td>
<td align="right"><?=$objResult["Used"];?></td>
</tr>
<?
}
?>
</table>
<?
mysql_close($objConnect);
?>
</body>
</html>
Date :
2011-05-06 16:23:10
By :
webmaster
อธิบายเพิ่มจากที่ คุณ Mr. Win ตอบนะครับ
WHERE 1 = 1 มันจะเป็นจริงตลอดเพราะฉะนั้นจะไม่มีผลต่อ SQL แต่อันนี้เป็นเทคนิคง่ายๆอันนึงที่ใช้กันบ่อยเวลาเราสร้าง dynamic SQL เพื่อที่จะได้เติมเงื่่อนไขอันอื่นไปได้โดยที่ไม่ต้องกังวลว่าจะต้องใช้ WHERE หรือ AND ต่อจาก SELECT xxx FROM yyy
Date :
2011-05-08 12:32:58
By :
karlkim
อ่อ มันเป็นอย่างงี้นี้เอง ใช้ง่ายขึ้นเยอะเลย
ขอบคุณครับผม
Date :
2012-02-02 13:35:35
By :
50121680
ก็เห็นบ่อยมากหลายปีที่ผ่านมา แต่ไม่ใช่มาตรฐาน ส่วนตัวจะไม่ให้จูเนียร์ที่เข้ามาทำงานใหม่ ๆ เขียนแบบนี้ เพราะจะกลายเป็นนิสัยครับ แม้ว่าลูกค้าไม่ได้ต้องการดูเนื้อในโปรแกรม ขอแค่หน้าตาใช่ตามที่ต้องการ ทำงานได้ รันผลออกมาตรง แต่จรรยาบรรณโปรแกรมเมอร์ก็ต้องมีครับ ผมคนนึงที่จะไม่สอนลูกน้องแบบนั้น
Date :
2012-02-02 14:17:15
By :
gunnermontana
ตอนแรกก็ไม่ค่อยได้ใช้ครับ พอดีเห็นใน phpMyAdmin ใช้ก็เลยลองดูครับ มันเลยติด ๆ มาจนถึงปัจจุบัน
Date :
2012-02-02 14:29:32
By :
webmaster
เห็นพวกทำ SQL Injection ชอบใช้กันนี่นา
Date :
2012-02-02 17:45:17
By :
13crowns
Load balance : Server 01