Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,027

HOME > PHP > PHP Forum > สอบถามการใช้ PHP PDO ดึงข้อมูลตามวันที่ แต่ดึงมาผิด



 

สอบถามการใช้ PHP PDO ดึงข้อมูลตามวันที่ แต่ดึงมาผิด

 



Topic : 136931



โพสกระทู้ ( 0 )
บทความ ( 0 )



สถานะออฟไลน์




โค้ดที่ผมใช้ครับ
Code (PHP)
$date1 = $_POST['dateStart'];
$date2 = $_POST['dateEnd'];
$txtKeyword = $_POST['txtKeyword'];
$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' OR DocuNo LIKE '%$txtKeyword%' ORDER BY SOID DESC");


รูป data date ที่เก็บในฐานข้อมูล
date

ผมค้นหาข้อมูลวันที่ 24/01/66 - 24/01/66 แต่มันเอาข้อมูลทั้งหมดมาแสดง ผมพลาดตรงไหนไปรึป่าวครับ



Tag : PHP









ประวัติการแก้ไข
2023-01-24 19:19:37
Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2023-01-24 19:18:48 By : kko View : 361 Reply : 8
 

 
ถ้ามีหลายเงื่อนไขลองจัดเป็นกลุ่ม เช่น

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
 


 

No. 2



โพสกระทู้ ( 0 )
บทความ ( 0 )



สถานะออฟไลน์


ถ้าใช้ AND สามารถค้นได้ครับ แต่ทีนี้ผมอยากให้ใช้ วันที่ค้นก็ได้หรือกรอกเลขที่เอกสารก็ได้แบบนี้อะครับ ผมลองใช้
(SOHD.DocuDate BETWEEN '$date1' AND '$date2') OR (DocuNo LIKE '%$txtKeyword%') ข้อมูลมาหมดเลยครับ ผมพลาดตรงไหนรึป่าวครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2023-01-25 08:05:26 By : kko
 

 

No. 3



โพสกระทู้ ( 9,542 )
บทความ ( 2 )



สถานะออฟไลน์


condition1 and condition2 and (condition3 or condition4)


ประวัติการแก้ไข
2023-01-25 09:02:03
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2023-01-25 08:57:26 By : Chaidhanan
 


 
ตอบความคิดเห็นที่ : 3 เขียนโดย : Chaidhanan เมื่อวันที่ 2023-01-25 08:57:26
รายละเอียดของการตอบ ::
ผมลองใช้
Code (PHP)
$stmt = $conn->prepare("SELECT TOP 500 * FROM SOHD LEFT JOIN EMCust ON EMCust.CustID=SOHD.CustID WHERE SOHD.EmpID='$empid' AND SOHD.DocuStatus = 'N' AND (SOHD.DocuDate BETWEEN '$date1' AND '$date2' OR SOHD.DocuNo LIKE '%$txtKeyword%') ORDER BY DocuDate DESC");

มันมาหมดเลยครับพี่ถ้าเปลี่ยนมาใช้ OR

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2023-01-25 09:53:21 By : kko
 


 

No. 5



โพสกระทู้ ( 1,994 )
บทความ ( 10 )



สถานะออฟไลน์
Facebook Blogger

ลอง echo คำสั่ง SQL ออกมาดูครับ ว่าเงื่อนไขการค้นหา ออกมาเหมือนที่คิดไว้หรือเปล่าครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2023-01-25 13:48:05 By : {Cyberman}
 


 

No. 6



โพสกระทู้ ( 9,542 )
บทความ ( 2 )



สถานะออฟไลน์


ตอบความคิดเห็นที่ : 4 เขียนโดย : kko เมื่อวันที่ 2023-01-25 09:53:21
รายละเอียดของการตอบ ::
ก็ต้องดูว่า field SOHD.DocuNo มันเข้าเคสนี้ หรือ เปล่า LIKE '%$txtKeyword%')


ถ้า $txtKeyword มันมีค่า ""(string ความยาว 0) มันก็จะได้ Like '%%' ซึ่ง ก็จะเข้าทุกเคส

ก่อนใช้ คำสั่ง or ก็ตรวจสอบ $txtKeyword ซะก่อน

Code (PHP)
$con1 = "SOHD.DocuDate BETWEEN '$date1' AND '$date2' "
   . ($txtKeyword>''? " OR SOHD.DocuNo LIKE '%$txtKeyword%'" : '');
$sql = <<<sql
SELECT TOP 500 * FROM SOHD 
LEFT JOIN EMCust ON EMCust.CustID=SOHD.CustID 
WHERE SOHD.EmpID='{$empid}' 
AND SOHD.DocuStatus = 'N' 
AND ({$con1}) 
ORDER BY DocuDate DESC
sql;

$stmt = $conn->prepare($sql);



ประวัติการแก้ไข
2023-01-25 16:39:17
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2023-01-25 16:34:18 By : Chaidhanan
 


 

No. 7



โพสกระทู้ ( 9,542 )
บทความ ( 2 )



สถานะออฟไลน์


ทีนี้ จะใช้ 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
 


 
ตอบความคิดเห็นที่ : 7 เขียนโดย : Chaidhanan เมื่อวันที่ 2023-01-25 16:55:08
รายละเอียดของการตอบ ::
... ขอบคุณสำหรับคำแนะนำมากๆครับ .......

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2023-01-26 09:44:09 By : kko
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : สอบถามการใช้ PHP PDO ดึงข้อมูลตามวันที่ แต่ดึงมาผิด
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 02
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่