คอลัมน์ที่ไม่รู้จักใน 'รายการฟิลด์' เกิดข้อผิดพลาดในแบบสอบถาม MySQL Update


127

ฉันได้รับข้อผิดพลาด MySQL # 1054 อยู่เรื่อย ๆ เมื่อพยายามดำเนินการค้นหาอัปเดตนี้:

UPDATE MASTER_USER_PROFILE, TRAN_USER_BRANCH
SET MASTER_USER_PROFILE.fellow=`y`
WHERE MASTER_USER_PROFILE.USER_ID = TRAN_USER_BRANCH.USER_ID
AND TRAN_USER_BRANCH.BRANCH_ID = 17

อาจเป็นข้อผิดพลาดทางไวยากรณ์ แต่ฉันได้ลองใช้การรวมภายในแทนและการแก้ไขอื่น ๆ แต่ฉันยังคงได้รับข้อความเดิม:

Unknown column 'y' in 'field list' 

คำตอบ:


167

ลองใช้เครื่องหมายคำพูดที่แตกต่างกันสำหรับ "y" เนื่องจากอักขระเครื่องหมายคำพูดของตัวระบุคือ backtick (“ `”) มิฉะนั้น MySQL จะ "คิด" ว่าคุณชี้ไปที่คอลัมน์ชื่อ "y"

ดูเอกสารประกอบ MySQL 5 ด้วย


ฉันมีสิ่งนี้เมื่อฉันสับสนและใช้เครื่องหมายคำพูดคู่แทนเครื่องหมายคำพูดเดี่ยวรอบ ๆ สตริงของฉัน
tripleee

48

ใส่สตริงใด ๆ ที่จะส่งไปยังเซิร์ฟเวอร์ mysql ภายในเครื่องหมายคำพูดเดียว เช่น:

$name = "my name"
$query = " INSERT INTO mytable VALUES ( 1 , '$name') "

โปรดทราบว่าแม้ว่าแบบสอบถามจะอยู่ระหว่างเครื่องหมายคำพูดคู่คุณต้องใส่สตริงใด ๆ ในเครื่องหมายคำพูดเดี่ยว


ขอบคุณ. ฉันพยายามหาสาเหตุว่าทำไมข้อความค้นหาของฉันใน PHP จึงไม่ทำงานสิ่งที่ฉันต้องทำคือเพิ่มเครื่องหมายคำพูดเดียว
RiCHiE

1
ฉันรู้ว่านี่เป็นโพสต์เก่า แต่คุณสามารถตอบได้หรือไม่ว่าทำไมคุณต้องใส่เครื่องหมายคำพูด?
RiCHiE

@RiCHiE มักจะปลอดภัยกว่าเมื่อใช้สตริง นอกจากนี้ฉันควรใส่สตริงระหว่างเครื่องหมายคำพูด ตัวอย่างเช่นเมื่อคุณใช้ฟังก์ชั่นเช่น SHA1 คุณใส่เครื่องหมายคำพูดไว้ในเนื้อหาด้านในเช่นSHA1('$var')
George

สิ่งนี้ได้ผลสำหรับฉัน ก่อนอื่นฉันลองใช้ backticks โดยไม่มีโชค
radbyx

โปรดหลีกเลี่ยงตัวแปรทั้งหมดที่ส่งเข้ามาในแบบสอบถามอย่างถูกต้อง! เพียงใช้$name = mysqli_real_escape_string($name)เพื่อหลีกหนีคำพูดอย่างถูกต้อง!
Le 'nton

16

คุณอาจตรวจสอบคำพูดที่คุณเลือก (ใช้เครื่องหมายคำพูดคู่ / เดี่ยวสำหรับค่าสตริง ฯลฯ และเครื่องหมายย้อนกลับสำหรับชื่อคอลัมน์)

เนื่องจากคุณต้องการอัปเดตตารางเท่านั้นmaster_user_profileฉันขอแนะนำให้ใช้แบบสอบถามที่ซ้อนกัน:

UPDATE
   master_user_profile
SET
   master_user_profile.fellow = 'y'
WHERE
   master_user_profile.user_id IN (
      SELECT tran_user_branch.user_id
      FROM tran_user_branch WHERE tran_user_branch.branch_id = 17);

4

ในกรณีของฉันมันเกิดจากช่องว่างต่อท้ายที่มองไม่เห็นที่ท้ายชื่อคอลัมน์ เพียงตรวจสอบว่าคุณใช้ "y" หรือ "y" แทนจริงๆ


2

ในขณะที่ทำงานกับ. Net app build ด้วยรหัส EF ก่อนอื่นฉันได้รับข้อความแสดงข้อผิดพลาดนี้เมื่อพยายามใช้การย้ายข้อมูลที่ฉันมี Sql("UPDATE tableName SET columnName = value");คำชี้แจง

ปรากฎว่าฉันสะกดผิด columnName


1

เพียงแค่แบ่งปันประสบการณ์ของฉันเกี่ยวกับเรื่องนี้ ฉันมีปัญหาเดียวกันนี้ คำสั่งแทรกหรืออัพเดตถูกต้อง และฉันยังตรวจสอบการเข้ารหัส คอลัมน์นี้มีอยู่ แล้ว! ฉันพบว่าฉันกำลังอ้างอิงคอลัมน์ในทริกเกอร์ของฉัน คุณควรตรวจสอบทริกเกอร์ของคุณเพื่อดูว่ามีสคริปต์ใดอ้างอิงคอลัมน์ที่คุณกำลังมีปัญหาอยู่หรือไม่


1

เพียงแค่แบ่งปันประสบการณ์ของฉันเกี่ยวกับเรื่องนี้ ฉันมีปัญหาเดียวกันนี้ คำถามของฉันชอบ:

select table1.column2 from table1

อย่างไรก็ตาม table1 ไม่มีคอลัมน์ column2


0

ฉันได้รับข้อผิดพลาดเดียวกันเช่นกันปัญหาในกรณีของฉันคือฉันรวมชื่อคอลัมน์ในGROUP BYประโยคและทำให้เกิดข้อผิดพลาดนี้ ดังนั้นจึงลบคอลัมน์ออกจากGROUP BYประโยคและใช้งานได้ !!!


0

ถ้ามันจำศีลและ JPA. ตรวจสอบชื่อตารางที่คุณอ้างถึงและคอลัมน์อาจไม่ตรงกัน


0

ฉันได้รับข้อผิดพลาดนี้เมื่อใช้ GroupBy ผ่าน LINQ บนฐานข้อมูล MySQL ปัญหาคือคุณสมบัติของวัตถุที่ไม่ระบุชื่อที่ถูกใช้โดย GroupBy ไม่ตรงกับชื่อคอลัมน์ฐานข้อมูล แก้ไขโดยการเปลี่ยนชื่อคุณสมบัติที่ไม่ระบุชื่อเพื่อให้ตรงกับชื่อคอลัมน์

.Select(f => new 
{
   ThisPropertyNameNeedsToMatchYourColumnName = f.SomeName
})
.GroupBy(t => t.ThisPropertyNameNeedsToMatchYourColumnName);

0

ข้อความค้นหาเช่นนี้จะทำให้เกิดข้อผิดพลาด:

SELECT table1.id FROM table2

โดยที่ตารางถูกระบุในคอลัมน์ให้เลือกและไม่รวมอยู่ในประโยคจาก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.