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,037

HOME > PHP > PHP Forum > ใช้ mysqli query ลบเรคคอร์ดที่เงื่อนไขเป็นวรรคไม่ได้ครับ



 

ใช้ mysqli query ลบเรคคอร์ดที่เงื่อนไขเป็นวรรคไม่ได้ครับ

 



Topic : 112199



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



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




คือผมสร้างเมธอดในคลาส Database

Code (PHP)
 public function deleteRecord($condit)
	{
		$obj = new mysqli($this->hostdb,$this->userdb,$this->passdb,$this->dbname);
		$strQry = "delete from ".$this->tablename." ".$condit;
		$qry = $obj->query($strQry);
		mysqli_close($obj);
	}


แล้วตอนสร้าง Object เพื่อมาเรียกใช้ (ขอข้ามโค๊ดตอนสร้าง Obj เลยนะครับ)

Code (PHP)
$courseObj->deleteRecord("where pID = '".$_SESSION['editID']."' AND pRoom = '".$_SESSION['editRoom']."'");


ปัญหาคือไม่ฟ้อง Error อะไรทั้งสิ้นครับ ตัวแปรเจ้าปัญหาคือ $_SESSION['editRoom']
ค่าของ $_SESSION['editRoom'] คือ "ห้อง 101 ตึก ก"
- ผมลองกำหนดข้อมูลใน editRoom ไม่ให้เว้นวรรค มันทำงานได้ครับ
- ผมลองลบตัวแปร editRoom ให้เหลือ pID อย่างเดียว มันทำงานได้ครับ
- ผมลอง echo คำสั่งคิวรี่ไปรันใน phpMyAdmin โดยตรงรันได้ครับ

เลยคิดว่าน่าจะมีปัญหาตรงที่มีการเว้นวรรคค่าในตัวแปรที่นำไปคิวรี่อะครับ
- ตอนใช้แบบ Structure+MySQL ไม่มีปัญหานะครับ แต่พอมาใช้กับ OOP+MySQLi ดันไม่ผ่านซะงั้น

ขอบคุณครับ



Tag : PHP, MySQL







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2014-10-28 13:21:42 By : whtchk View : 1485 Reply : 15
 

 

No. 1



โพสกระทู้ ( 5,105 )
บทความ ( 4 )

สมาชิกที่ใส่เสื้อไทยครีเอท Hall of Fame 2012

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


เล่าสู่กันฟังครับ
โดยปกติเวลาจะลบ หรือ แก้ไข
ผมจะ where หรือ อ้างอิง แค่ id หลัก ๆ อย่างเดียว
จะไม่เอาตัวอื่นเข้ามาเกี่ยวข้อง มันจะสับสน งง งวย ครับ






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-10-28 13:29:07 By : apisitp
 


 

No. 2



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



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


ตอบความคิดเห็นที่ : 1 เขียนโดย : apisitp เมื่อวันที่ 2014-10-28 13:29:07
รายละเอียดของการตอบ ::
เล่าสู่กันฟังครับ
โดยปกติเวลาจะลบ หรือ แก้ไข
ผมจะ where หรือ อ้างอิง แค่ id หลัก ๆ อย่างเดียว
จะไม่เอาตัวอื่นเข้ามาเกี่ยวข้อง มันจะสับสน งง งวย ครับ


พอดีว่ามันเป็นคอมโพสิทคีย์น่ะครับ ID อย่างเดียวมันมีโอกาสซ้ำซ้อนกันได้ครับ


ประวัติการแก้ไข
2014-10-28 13:36:08
2014-10-28 13:36:24
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-10-28 13:35:41 By : whtchk
 

 

No. 3



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



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


ผมคิดว่ามันขึ้นอยู่กับเงื่อนไขครับ
Code
$courseObj->deleteRecord("where pID = '".$_SESSION['editID']."' AND pRoom = '".$_SESSION['editRoom']."'");


ตรงตัวอักษรสีแดง SQL จะทำงานก็ต่อเมื่อ pID = '".$_SESSION['editID']."' และ pRoom = '".$_SESSION['editRoom']."' เป็นจริง คือ ค่าของ pID และ pRoom ต้องไม่เท่ากับค่าว่างและต้องตรงกับข้อมูลในฐานข้อมูล

แต่ถ้าคุณใช้ OR
Code
$courseObj->deleteRecord("where pID = '".$_SESSION['editID']."' OR pRoom = '".$_SESSION['editRoom']."'");


มันทำงานได้ครับ เพราะถ้า pID หรือ pRoom มีค่า คือไม่เท่ากับค่าว่าและค่าใดค่านึงตรงกับข้อมูลใน DB ก็ทำงานได้

ตัวโปรแกรมไม่น่าผิดครับ ลองเช็คค่าของตัวแปร $_SESSION['editID'] และ $_SESSION['editRoom'] และหลักการการทำงานของโปรแกรมครับ ว่าคุณต้องการแบบไหน ใช้เงื่อนไขใดในการ Query

ไม่รู้ งง ป่าว? ผมอธิบายไปมาเริ่ม งง เองละ 555+
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-10-28 13:36:17 By : arm8957
 


 

No. 4



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



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


ตอบความคิดเห็นที่ : 3 เขียนโดย : arm8957 เมื่อวันที่ 2014-10-28 13:36:17
รายละเอียดของการตอบ ::
ผมคิดว่ามันขึ้นอยู่กับเงื่อนไขครับ
Code
$courseObj->deleteRecord("where pID = '".$_SESSION['editID']."' AND pRoom = '".$_SESSION['editRoom']."'");


ตรงตัวอักษรสีแดง SQL จะทำงานก็ต่อเมื่อ pID = '".$_SESSION['editID']."' และ pRoom = '".$_SESSION['editRoom']."' เป็นจริง คือ ค่าของ pID และ pRoom ต้องไม่เท่ากับค่าว่างและต้องตรงกับข้อมูลในฐานข้อมูล

แต่ถ้าคุณใช้ OR
Code
$courseObj->deleteRecord("where pID = '".$_SESSION['editID']."' OR pRoom = '".$_SESSION['editRoom']."'");


มันทำงานได้ครับ เพราะถ้า pID หรือ pRoom มีค่า คือไม่เท่ากับค่าว่าและค่าใดค่านึงตรงกับข้อมูลใน DB ก็ทำงานได้

ตัวโปรแกรมไม่น่าผิดครับ ลองเช็คค่าของตัวแปร $_SESSION['editID'] และ $_SESSION['editRoom'] และหลักการการทำงานของโปรแกรมครับ ว่าคุณต้องการแบบไหน ใช้เงื่อนไขใดในการ Query

ไม่รู้ งง ป่าว? ผมอธิบายไปมาเริ่ม งง เองละ 555+


ใช้ AND ถูกแล้วครับ จำเป็นต้องผ่านทั้ง 2 เงื่อนไขถึงจะลบได้

ผมว่าทาง Logic น่าจะผ่านแล้วครับ เพราะผม Echo ตัว SQL ออกมา Debug แล้วทำงานได้ครับ เพียงแต่ถ้าใช้ผ่านคำสั่ง $obj->query() จะไม่ผ่านครับ แต่ถ้าหันไปใช้ mysql_query() ตัวนี้ก็ทำงานได้อีกเช่นเดียวกัน
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-10-28 13:39:33 By : whtchk
 


 

No. 5



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



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


หลายคนอาจจะยังงงนะครับ

ปัญหาของผมคือ ถ้าค่า editRoom เป็น "ห้อง1ตึกข" จะรันผ่านครับ (ไม่มีเว้นวรรคเลย)
แต่ถ้าผมใช้ "ห้อง 1 ตึก ข" โดยมีการเว้นวรรคระหว่างคำ มันผ่านแต่ไม่เพิ่มลงฐานให้ครับ (echo ไปรันแบบ manual ผ่านเฉย)

เพิ่มเติมอีกนิด ถ้าเป็นโค๊ด SELECT จะใช้ได้ครับ ผมเลยชักงงๆแล้ว
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-10-28 13:43:46 By : whtchk
 


 

No. 6



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



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


การใช้ String มาใช้ในการ Query นอกจากจะใช้คำสั่ง LIKE , LIKE '%...%' แล้ว ไม่แนะนำให้ใช้ เท่ากับ(=) นะครับ เพราะมันจะเกิดข้อผิดพลาดได้สูงมาก ในกรณีของคุณ ถ้าเป็นผมใช้งาน FK มาช่วยครับ มันถูกต้องแลพแม่นยำกว่าเยอะ แต่ไม่รุคุณจะปรับได้แค่ไหนนะครับ จะถึงขั้นต้อง Design DB ใหม่รึป่าว ยังไงก็ สู้ๆ ละกันครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-10-28 13:53:43 By : arm8957
 


 

No. 7

Guest


ไม่น่าเกี่ยวกับ space ไม่ space มั้ง

เงื่อนไขมันไม่ตรงมันก็เลยไม่ออกมากกว่า

ถ้า = ไม่ได้ลองเปลี่ยนเป้น like ดู (ลองดูเฉยๆ ไม่ได้บอกว่าให้ใช้ like)
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-10-28 13:58:53 By : ห้ามตอบเกินวันละ 2 กระทู้
 


 

No. 8



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



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


ตอบความคิดเห็นที่ : 6 เขียนโดย : arm8957 เมื่อวันที่ 2014-10-28 13:53:43
รายละเอียดของการตอบ ::
ขอบคุณที่แนะนำครับ ตอนผมเอา String มาเป็นเงื่อนไขผมก็อึดอัดใจพอสมควร เดี๋ยวจะลองทบทวนดูอีกทีว่าเอา FK ตัวอื่นมาใช้ได้บ้างไหมครับ ขอบคุณครับ


ตอบความคิดเห็นที่ : 7 เขียนโดย : ห้ามตอบเกินวันละ 2 กระทู้ เมื่อวันที่ 2014-10-28 13:58:53
รายละเอียดของการตอบ ::
ตอนนี้ผม Debug ไปๆมาๆหลายๆส่วน กลายเป็นว่าไม่เกี่ยวกับเว้นวรรคจริงๆด้วยครับ

สาเหตุที่ผมคิดว่าเกี่ยวกับเว้นวรรค เพราะตอนแรกผมสั่งลบข้อมูลไม่ได้ ผมเลยเทสด้วยการใส่ข้อมูลแบบไม่เว้นวรรค มันลบได้ แต่พอเพิ่มเว้นวรรคเข้าไปมันดันลบไม่ได้ แต่ตอนนี้บางตัวก็ลบไม่ได้แล้วครับ ถึงแม้จะไม่เว้นวรรคก็เหอะ เดี๋ยวจะลองนั่ง Debug ไปเรื่อยๆนะครับ

เรื่องเงื่อนไขนี่ผมว่าตรงแล้วนะครับ
คือผมสั่ง query($string) แล้วมันเงียบ
แต่ถ้าผม echo $string แล้วเอาค่าที่ออกมาไปรันบน phpMyAdmin มันทำงานได้อะครับ เลยคิดว่าเงื่อนไขตรงแล้ว แต่อาจจะติดพวกสัญลักษณ์อะไรบางอย่างที่มันทำงานใน php ไม่ได้แน่ๆเลย



ประวัติการแก้ไข
2014-10-28 14:12:51
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-10-28 14:11:14 By : whtchk
 


 

No. 9



โพสกระทู้ ( 5,105 )
บทความ ( 4 )

สมาชิกที่ใส่เสื้อไทยครีเอท Hall of Fame 2012

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


รออ่านหาความรู้ ถ้าแก้สำเร็จแว่ะมาบอกบ้างนะครับ ว่าเกิดจากอะไร
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-10-28 14:29:19 By : apisitp
 


 

No. 10



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



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


ลองกำหนด set name utf8 ด้วยสิครับ ข้อมูลมันเป็น ภาษาไทย หรือ ถ้าเป็น tis620 ก็ใช้ tis620

ที่บอกว่า mysql_query ทำงานได้ ใช้คลาส แบบเดียวกันหรือเปล่าครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-10-28 16:56:14 By : Chaidhanan
 


 

No. 11



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



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


ตอบความคิดเห็นที่ : 10 เขียนโดย : Chaidhanan เมื่อวันที่ 2014-10-28 16:56:14
รายละเอียดของการตอบ ::
จริงๆมีโค๊ด SET UTF 8 อยู่แล้วครับ แต่ผมถอดออกมาก่อนเอามาโพสต์น่ะครับ

ส่วน mysql_query ผมใช้ตอนเขียนแบบ Structure ครับ แต่ตอนนี้เปลี่ยนมาเป็น OOP มันเลยใช้ไม่ได้ขึ้นมา



ประวัติการแก้ไข
2014-10-28 18:11:27
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-10-28 18:09:54 By : whtchk
 


 

No. 12



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



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


Code (PHP)
<?php 
$hk=new mysqli('localhost', 'test', 'test', 'test');
$hk->query('SET NAMES UTF8');
$thai='ภาษา อังกฤษ 101';
$hk->query("delete from gen where thai='$thai' ");
echo $hk->affected_rows;
?>


อันนี้ผมเอามาลองดู ก็ได้ปกติครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-10-28 18:11:42 By : Chaidhanan
 


 

No. 13



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



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


ตอบความคิดเห็นที่ : 12 เขียนโดย : Chaidhanan เมื่อวันที่ 2014-10-28 18:11:42
รายละเอียดของการตอบ ::
ครับ ตาม คห.8 ที่ผมอธิบายไว้มันน่าจะไม่เกี่ยวกับเว้นวรรคแล้ว ตอนนี้ผมทดสอบทั้งแบบใช้ static text ไปแล้วก็ยังไม่ได้อยู่ดี ตอนนี้ไม่ไหว ไว้พรุ่งนี้กะจะมานั่งงมหาอีกรอบน่ะครับ


ขอบคุณทุกคนสำหรับคำแนะนำนะครับ ไว้ทราบปัญหาแล้วจะมาบอก ตอนนี้ไม่อยากแก้ปัญหาด้วยการเปลี่ยนฟิลด์ที่นำมาใช้ตรวจสอบก่อน อยากรู้ว่าเพราะอะไรทำไมมันถึงไม่ได้น่ะครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-10-28 22:16:36 By : whtchk
 


 

No. 14



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



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


แก้ไขได้แล้วครับ สรุปแล้วคือเป็นความสะเพร่าของผมเองครับ

ที่มาของปัญหานี้คือ ผมใส่ข้อความแบบมีวรรค แต่เป็นภาษาไทย มันเลยลบไม่ได้ ผมเลยเพิ่มข้อมูลแบบมั่วๆแต่เป็นภาษาอังกฤษ แล้วลองลบดู ผลคือลบได้ ผมเลยคิดว่าเป็นที่เว้นวรรค

ปัญหาคือ ผมเอา SET NAME UTF8 ออกมันเลยลบไม่ได้ครับ

ตอนแรกคิดว่าลบข้อมูลไม่จำเป็นต้องกำหนด UTF8 หรอกมั้งเลยเอาออก แต่ลืมไปว่าผมเอาคำสั่งลบอยู่ก่อน <meta> Tag มันเลยไม่ Encode เงื่อนไขที่เป็นภาษาไทยให้ก่อนนำไปคิวรี่

งานนี้ไม่รู้จะเรียกว่าเส้นผมบังภูเขาได้รึเปล่า เพราะผมสะเพร่าเอง

ขอบคุณทุกคนครับ


ประวัติการแก้ไข
2014-10-29 10:39:06
2014-10-29 10:39:14
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-10-29 10:37:52 By : whtchk
 


 

No. 15



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



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


ตอบความคิดเห็นที่ : 14 เขียนโดย : whtchk เมื่อวันที่ 2014-10-29 10:37:52
รายละเอียดของการตอบ ::
มันไม่ใช่ อยู่ ก่อน <meta> หรือหลัง ครับ เพราะมันอยู่คนละเครื่องกันเครับ meta มันเป็นส่วนการแสดงผล ของ client

แต่ mysql set names เป็นส่วน ของ mysql server ครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2014-10-30 14:39:34 By : Chaidhanan
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : ใช้ mysqli query ลบเรคคอร์ดที่เงื่อนไขเป็นวรรคไม่ได้ครับ
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ 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 อัตราราคา คลิกที่นี่