เมื่อใดก็ตามที่คุณได้รับ ...
"คำเตือน: mysqli_fetch_object () คาดว่าพารามิเตอร์ 1 จะเป็น mysqli_result โดยกำหนดบูลีน"
... อาจเป็นเพราะมีปัญหากับแบบสอบถามของคุณ prepare()
หรือquery()
อาจส่งคืนFALSE
(บูลีน) แต่ความล้มเหลวนี้ข้อความทั่วไปไม่ปล่อยให้คุณมากในทางของเบาะแส คุณจะทราบได้อย่างไรว่ามีข้อผิดพลาดเกิดขึ้นกับข้อความค้นหาของคุณอย่างไร คุณถาม !
ก่อนอื่นตรวจสอบให้แน่ใจว่าการรายงานข้อผิดพลาดเปิดอยู่และมองเห็นได้: เพิ่มสองบรรทัดต่อไปนี้ที่ด้านบนของไฟล์ทันทีหลังจากเปิด<?php
แท็ก:
error_reporting(E_ALL);
ini_set('display_errors', 1);
หากการรายงานข้อผิดพลาดของคุณได้รับการตั้งค่าใน php.ini คุณจะไม่ต้องกังวลเกี่ยวกับเรื่องนี้ เพียงให้แน่ใจว่าคุณจัดการข้อผิดพลาดอย่างสง่างามและไม่เปิดเผยสาเหตุที่แท้จริงของปัญหาใด ๆ ให้กับผู้ใช้ของคุณ การเปิดเผยสาเหตุที่แท้จริงต่อสาธารณะอาจเป็นคำเชิญสลักทองสำหรับผู้ที่ต้องการทำอันตรายต่อไซต์และเซิร์ฟเวอร์ของคุณ หากคุณไม่ต้องการส่งข้อผิดพลาดไปยังเบราว์เซอร์คุณสามารถตรวจสอบบันทึกข้อผิดพลาดของเว็บเซิร์ฟเวอร์ได้ตลอดเวลา สถานที่เข้าสู่ระบบจะแตกต่างจากเซิร์ฟเวอร์เช่นเซิร์ฟเวอร์บน Ubuntu /var/log/apache2/error.log
บันทึกข้อผิดพลาดมักจะตั้งอยู่ที่ หากคุณกำลังตรวจสอบบันทึกข้อผิดพลาดในสภาพแวดล้อม Linux คุณสามารถใช้tail -f /path/to/log
ในหน้าต่างคอนโซลเพื่อดูข้อผิดพลาดที่เกิดขึ้นแบบเรียลไทม์ .... หรือตามที่คุณทำ
เมื่อคุณถูกยกกำลังสองไปกับการรายงานข้อผิดพลาดมาตรฐานการเพิ่มการตรวจสอบข้อผิดพลาดในการเชื่อมต่อฐานข้อมูลของคุณและแบบสอบถามจะให้รายละเอียดเพิ่มเติมเกี่ยวกับปัญหาที่เกิดขึ้น ดูตัวอย่างที่ชื่อคอลัมน์ไม่ถูกต้อง ก่อนรหัสที่ส่งกลับข้อผิดพลาดร้ายแรงทั่วไป:
$sql = "SELECT `foo` FROM `weird_words` WHERE `definition` = ?";
$query = $mysqli->prepare($sql)); // assuming $mysqli is the connection
$query->bind_param('s', $definition);
$query->execute();
ข้อผิดพลาดทั่วไปและไม่เป็นประโยชน์กับคุณในการแก้ไขสิ่งที่เกิดขึ้น
กับคู่ของบรรทัดที่มากขึ้นของรหัสที่คุณจะได้รับข้อมูลรายละเอียดมากที่คุณสามารถใช้เพื่อแก้ปัญหาทันที ตรวจสอบprepare()
คำแถลงเกี่ยวกับความจริงและหากเป็นเรื่องที่ดีคุณสามารถดำเนินการผูกมัดและดำเนินการต่อได้
$sql = "SELECT `foo` FROM `weird_words` WHERE `definition` = ?";
if($query = $mysqli->prepare($sql)) { // assuming $mysqli is the connection
$query->bind_param('s', $definition);
$query->execute();
// any additional code you need would go here.
} else {
$error = $mysqli->errno . ' ' . $mysqli->error; // 1054 Unknown column 'foo' in 'field list'
// handle error
}
หากมีสิ่งผิดปกติคุณสามารถพ่นข้อความแสดงข้อผิดพลาดออกซึ่งนำคุณไปสู่ปัญหาโดยตรง ในกรณีนี้ไม่มีfoo
คอลัมน์ในตารางการแก้ปัญหาเป็นเรื่องเล็กน้อย
หากคุณเลือกคุณสามารถรวมการตรวจสอบนี้ในฟังก์ชั่นหรือคลาสและขยายโดยการจัดการข้อผิดพลาดอย่างสง่างามตามที่กล่าวไว้ก่อนหน้านี้