อิมเมจฐานข้อมูลแล้วอัพเดต = ข้อผิดพลาด อัพเดตแล้วอิมเมจ = สำเร็จ! ทำไม

ดังนั้นฉันจึงพบข้อผิดพลาดที่น่างง (เกิดจากโปรแกรมเมอร์) โดยฉันเป็นโปรแกรมเมอร์

ฉันได้สร้างเว็บไซต์พร้อมโปรไฟล์ผู้ใช้ โปรไฟล์ผู้ใช้มีหลายช่องและรูปภาพ รูปภาพถูกอัปโหลดได้ดี ขั้นแรกจะแปลงให้พอดีกับพื้นที่เฉพาะ

...
//ฉันกำลังอัพโหลดรูปภาพขึ้นฐานข้อมูล
imageConverter->loadImage($_FILE... blah balh).
...

เมื่อผู้ใช้ตัดสินใจ เพื่อเปลี่ยนข้อมูลของเขาเขาก็มีโอกาสที่จะเปลี่ยนภาพของเขาด้วย กระบวนการแก้ไขโปรไฟล์นั้นเหมือนกับกระบวนการเริ่มต้นโปรไฟล์ทุกประการ ข้อแตกต่างเพียงอย่างเดียวคือฉันตรวจสอบฟิลด์ที่เขา/เธออัปเดตทีละรายการ และเปลี่ยนบรรทัดนั้น int ฐานข้อมูล (เห็นได้ชัดว่าสามารถทำได้อย่างเหมาะสมที่สุด แต่ก่อนอื่นฉันต้องการให้มันทำงาน :))

ส่วนที่สับสนคือสิ่งนี้ เมื่อฉันแก้ไขข้อมูลโปรไฟล์ ลำดับจะเป็นดังนี้ ฉันใช้ MYSQLI ($this->mysqli->query($query))

สิ่งเหล่านี้ได้รับการแก้ไขในฐานข้อมูลหากมีการเปลี่ยนแปลง

  • 1 ชื่อ
  • 2 นามสกุล
  • 3 รหัสผ่าน
  • การตั้งค่าต่างๆ 4 แบบ (ช่องทำเครื่องหมาย / ปุ่มตัวเลือก)
  • 5 อีเมล
  • 6 รูปโปรไฟล์
  • 7 อัปเดตข้อมูลเซสชันพร้อมแบบสอบถามไปยังฐานข้อมูลเพื่อรับข้อมูลอัปเดตมากที่สุด

ตอนนี้ #7 คืนค่าเท็จ (SELECT * FROM USERSINFO)

ตอนนี้ถ้าฉันเปลี่ยนลำดับการดำเนินการ

  • 1 ชื่อ
  • 2 นามสกุล
  • 3 รหัสผ่าน
  • การตั้งค่าต่างๆ 4 แบบ (ช่องทำเครื่องหมาย / ปุ่มตัวเลือก)
  • 5 อีเมล
  • 6 อัปเดตข้อมูลเซสชันพร้อมแบบสอบถามไปยังฐานข้อมูลเพื่อรับข้อมูลอัปเดตมากที่สุด
  • 7 รูปโปรไฟล์

มันใช้งานได้ดี

มีคำตอบไหม? นี่หมายความว่าถ้ามีคน 1,000 คนพยายามใช้ฐานข้อมูลของฉันในคราวเดียว ข้อมูลทั้งหมดจะพังใช่หรือไม่

รหัสบางส่วน:

การแทรกรูปภาพ (ขั้นตอน #6 ในตัวอย่างที่ใช้งานไม่ได้, #7 ในตัวอย่างการทำงาน)
$this->mysqli->query("DELETE FROM ".DB_REVIEW_IMAGE_TABLE." WHERE email='$email'");
if ($this->mysqli->query("INSERT INTO ".DB_REVIEW_IMAGE_TABLE." VALUES('$email', '$content', '$imageType')"))

การอัปเดตข้อมูลผู้ใช้เป็นข้อมูลเซสชัน (ขั้นตอน #7 ในตัวอย่างที่ไม่ดี, #6 ในตัวอย่างการทำงาน)
$this->userInfo = $_SESSION_USER_INFO] = $database->getUserInfo($this->email);

ซึ่ง $ ฐานข้อมูล -> getUserInfo($this->อีเมล) == "SELECT ".DB_USERS_ALL_MOUNTAIN.", ".DB_USERS_BACK_COUNTRY.", ".DB_USERS_GROOMERS", ".DB_USERS_PARK.", ".DB_USERS_SEASON_DAYS.", ".DB_USERS_SEX" , ".DB_USERS_YEARS.", ".DB_USERS_FIRST_NAME.", ".DB_USERS_LAST_NAME.", ".DB_USERS_CITY.", ".DB_USERS_STATE" FROM ".DB_USER_INFO_TABLE.SQL_WHERE_EMAIL

ฉันชอบใช้ค่าคงที่ :) และ DB_USERS_SEX = ชายหรือหญิง (เผื่อไว้)

Michael


person ThePrimeagen    schedule 08.11.2010    source แหล่งที่มา
comment
โปรดจัดรูปแบบคำถามของคุณเพื่อให้อ่านง่ายขึ้น ใช้ปุ่มด้านบนแบบฟอร์ม   -  person bcosca    schedule 08.11.2010
comment
ฉันเดาว่าฐานข้อมูลไม่ว่างขณะแทรกรูปภาพ ดังนั้นถ้าฉันทำคำสั่งก่อนหน้า มันก็ใช้ได้ดี สับสนมาก!   -  person ThePrimeagen    schedule 08.11.2010
comment
เราขอรหัสจริงได้ไหม? คุณอัปเดตรูปภาพอย่างไร มีการเรียกใช้คำสั่งใดบ้าง ฯลฯ หน้า?   -  person deceze♦    schedule 08.11.2010
comment
โอเค มีโค้ดอยู่บ้าง :!   -  person ThePrimeagen    schedule 08.11.2010
comment
รหัสที่ยังขาดหายไป - โค้ด PHP จริงที่สร้างและเรียกใช้คำค้นหาของคุณจะมีประโยชน์ คุณใช้คำสั่ง UPDATE เดี่ยวๆ ในแต่ละขั้นตอนหรือสร้างแบบสอบถาม UPDATE แบบตัวแปรในขณะที่คุณดำเนินการหรือไม่ สิ่งที่สำคัญสำหรับฉันคือคุณไม่ได้ระบุชื่อฟิลด์ใน INSERT ของคุณ ซึ่งหมายความว่าคุณต้องอาศัยตำแหน่งของฟิลด์ที่แม่นยำ (ซึ่งมีแนวโน้มที่จะแตกหักเมื่อคุณแก้ไขสคีมาของคุณ - คุณจะพลาดข้อความค้นหาบางส่วนในโค้ดของคุณ หากคุณเคยเปลี่ยนสคีมา และจะหาได้ยาก)   -  person gregmac    schedule 08.11.2010


คำตอบ (1)


ตกลงคำตอบนั้นง่าย

คลาสฐานข้อมูลของฉันมี var ระดับโมดูลาร์ที่เรียกว่า $mysqli $mysqli นี้กำลังถูกใช้งานในเวลาเดียวกัน

ฉันโทรไปตามลำดับ 2 ครั้ง

  • อัพเดตรูปภาพ
  • อัพเดต SessionInfo

แต่ละคนใช้ฐานข้อมูล แต่การมีระดับโมดูลาร์ var $mysqli จะทำให้เกิดข้อขัดแย้งได้ โดยเฉพาะอย่างยิ่งเนื่องจากข้อมูลเซสชันและข้อมูลรูปภาพอยู่ในฐานข้อมูลสองแห่งที่แตกต่างกัน ฉันคงไม่มีความรู้เกี่ยวกับ php มากนัก แต่สิ่งเหล่านี้จะต้องดำเนินการก่อนที่อีกอันหนึ่งจะเสร็จสิ้น ดังนั้น หากต้องการแยกส่วนนี้ แต่ละวิธีภายในฐานข้อมูล

  • สร้างการเชื่อมต่อกับฐานข้อมูล
  • ตั้งค่าฐานข้อมูลให้ใช้งาน
  • ดำเนินการค้นหา
  • ปิดการเชื่อมต่อ / ชุดผลลัพธ์

ตอนนี้มันใช้งานได้แล้ว!

person ThePrimeagen    schedule 08.11.2010