 |
สอบถามการใช้ PHP PDO ดึงข้อมูลตามวันที่ แต่ดึงมาผิด |
|
 |
|
|
 |
 |
|
ถ้ามีหลายเงื่อนไขลองจัดเป็นกลุ่ม เช่น
Code (PHP)
$stmt = $conn->prepare("SELECT TOP 500 * FROM SOHD LEFT JOIN EMCust ON EMCust.CustID=SOHD.CustID WHERE
EmpID = $empid AND DocuStatus = 'N' AND (SOHD.DocuDate BETWEEN '$date1' AND '$date2') AND (DocuNo LIKE '%$txtKeyword%') ORDER BY SOID DESC");
|
 |
 |
 |
 |
Date :
2023-01-24 19:55:27 |
By :
009 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ถ้าใช้ AND สามารถค้นได้ครับ แต่ทีนี้ผมอยากให้ใช้ วันที่ค้นก็ได้หรือกรอกเลขที่เอกสารก็ได้แบบนี้อะครับ ผมลองใช้
(SOHD.DocuDate BETWEEN '$date1' AND '$date2') OR (DocuNo LIKE '%$txtKeyword%') ข้อมูลมาหมดเลยครับ ผมพลาดตรงไหนรึป่าวครับ
|
 |
 |
 |
 |
Date :
2023-01-25 08:05:26 |
By :
kko |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
condition1 and condition2 and (condition3 or condition4)
|
ประวัติการแก้ไข 2023-01-25 09:02:03
 |
 |
 |
 |
Date :
2023-01-25 08:57:26 |
By :
Chaidhanan |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ลอง echo คำสั่ง SQL ออกมาดูครับ ว่าเงื่อนไขการค้นหา ออกมาเหมือนที่คิดไว้หรือเปล่าครับ
|
 |
 |
 |
 |
Date :
2023-01-25 13:48:05 |
By :
{Cyberman} |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ทีนี้ จะใช้ pdo::prepare ทั้งที ก็ใช้ให้มัน ถูกวัตถุประสงค์ของ procedure ที่เขาตั้งใจไว้ให้
จะได้สบายใจเรื่อง sql injection จะมานั่งต่อ string เองก็กะไรอยู่
Code (PHP)
$con1 = "SOHD.DocuDate BETWEEN :d1 AND :d2 " . ($txtKeyword>''? " OR SOHD.DocuNo LIKE :lk1 " : '');
$sql = <<<sql
SELECT TOP 500 * FROM SOHD
LEFT JOIN EMCust ON EMCust.CustID=SOHD.CustID
WHERE SOHD.EmpID=:id
AND SOHD.DocuStatus = 'N'
AND ({$con1})
ORDER BY DocuDate DESC
sql;
$stmt = $conn->prepare($sql);
$stmt->bindParam(':id', $empid);
$stmt->bindParam(':d1', $date1);
$stmt->bindParam(':d2', $date2);
if( $txtKeyword>''){
$stmt->bindParam(':lk1', $txtKeyword);
}
$stmt->execute();
|
 |
 |
 |
 |
Date :
2023-01-25 16:55:08 |
By :
Chaidhanan |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|