Lỗi: cố gắng lấy thuộc tính ‘num_rows’ của phi đối tượng trong C:\wamp64\www\online-exam-portal\code\manage-exam\_export-to-csv.php trên dòng 85

lập trình


Tôi đang cố gắng lấy thông tin từ DB về tất cả các học sinh thi và xuất dữ liệu sang Csv nhưng tôi gặp phải lỗi này,

<tr><th align='left' bgcolor='#f57900' colspan="5"><span style='background-color: #cc0000; color: #fce94f; font-size: x-large;'>( ! )</span> Notice: Trying to get property 'num_rows' of non-object in C:\wamp64\www\online-exam-portal\code\manage-exam\_export-to-csv.php on line 85</th></tr>

đây là mã tôi đã viết, xuất sang csv.php để tìm nạp dữ liệu,

PHP
  1  <?php
  2  require_once '../connect.php';
  3  require_once '../session.php';
  4  
  5  ini_set('display_errors', 1);
  6  ini_set('display_startup_errors', 1);
  7  error_reporting(E_ALL);
  8  
  9  // Check if the user is logged in
 10   //(!isset($_SESSION['user_id'])) {
 11      //Redirect or handle unauthorized access
 12      //header('Location: ../session.php')
 13     //exit();
 14  //}
 15  
 16  // Set the content-type to CSV and specify the filename for download
 17  header("Content-type: application/csv");
 18  header("Content-Disposition: attachment; filename=user_responses.csv");
 19  header("Pragma: no-cache");
 20  header("Expires: 0");
 21  
 22  // Get the user ID from the session
 23  $userID = $_SESSION['userID'];
 24  $examID = $_POST['examID'];
 25  
 26  //echo "<pre>" . $userID . "<pre/>";
 27  //exit();
 28  
 29  // Fetch user responses to questions
 30  $sql = "SELECT
 31              'Multi-choice' AS exam_type,
 32              mcq.question AS question_text,
 33              mcq.correct_answer AS correct_answer,
 34              mcqr.response AS chosen_option,
 35              mcqr.score AS marks
 36          FROM
 37              multi_choice_question mcq
 38              INNER JOIN multi_choice_response mcqr ON mcq.exam_id = mcqr.exam_id
 39                  AND mcq.question_no = mcqr.question_no
 40          WHERE
 41              mcqr.assignee_id = '$userID'
 42              AND mcq.exam_id = $examID
 43  
 44          UNION
 45  
 46          SELECT
 47              'Fill in the blank' AS exam_type,
 48              fiq.question AS question_text,
 49              fir.response AS chosen_option,
 50              fir.score AS marks
 51          FROM
 52              fill_in_question fiq
 53              INNER JOIN fill_in_response fir ON fiq.exam_id = fir.exam_id
 54                  AND fiq.question_no = fir.question_no
 55          WHERE
 56              fir.assignee_id = '$userID'
 57              AND fiq.exam_id = $examID
 58  
 59          UNION
 60  
 61          SELECT
 62              'Theory' AS exam_type,
 63              tq.question AS question_text,
 64              tr.response AS chosen_option,
 65              tr.score AS marks
 66          FROM
 67              theory_question tq
 68              INNER JOIN theory_response tr ON tq.exam_id = tr.exam_id
 69                  AND tq.question_no = tr.question_no
 70          WHERE
 71              tr.assignee_id = '$userID'
 72              AND tq.exam_id = $examID";
 73  
 74  $result = mysqli_query($conn, $sql);
 75  //echo "<pre>" . $result . "<pre/>";
 76  //exit();
 77  
 78  // Create the output file (without saving it)
 79  
 80  $dataFile = fopen('php://output', 'w');
 81  
 82  
 83  
 84  
 85  if ($result->num_rows > 0) {
 86  
 87      //if ($result) {
 88        //  if ($result ->num_rows > 0) {
 89      
 90  
 91  // Get the total possible mark
 92  $markResult = $conn->query("SELECT total_mark FROM exam WHERE exam_id = $examID");
 93  $totalMark = $markResult->fetch_assoc()['total_mark'];
 94  
 95    // Output the data
 96    while ($row = $result->fetch_assoc()) {
 97      fputcsv($dataFile, $row);
 98  // }
 99  }
100  
101      // Output the header
102      fputcsv($dataFile, array("QUESTION TYPE", "QUESTION", "CORRECT ANSWER", "CHOSEN OPTION", "SCORE(out of $totalMarks)"));
103  
104  }
105      else {
106      echo "0 results";
107  }
108  
109  // Close the file handle
110  fclose($dataFile);
111  
112  // Close the database connection
113  mysqli_close($conn);
114  ?>

Những gì tôi đã thử:

đang cố gắng lấy thuộc tính ‘num_rows’ của phi đối tượng trong C:\wamp64

Giải pháp 1

Vấn đề là ở đó $result không chứa bất cứ điều gì. Rất có thể lệnh gọi SQL ở dòng 74 không thành công nhưng bạn đã quên kiểm tra.

Giải pháp 2

Lỗi của bạn rất có thể xảy ra do việc thực thi truy vấn ‘mysqli_query($conn, $sql)’ của bạn không thành công và do đó, ‘$result’ không phải là một đối tượng có thuộc tính ‘num_rows’ của bạn. Bạn nên kiểm tra xem việc thực hiện truy vấn của mình có thành công hay không, thêm một số xử lý lỗi để kiểm tra xem có vấn đề gì không. Đảm bảo rằng đối tượng ‘$conn’ của bạn hợp lệ và được kết nối với cơ sở dữ liệu –

PHP
$result = mysqli_query($conn, $sql);

if (!$result) {
    die('Error : ' . mysqli_error($conn));
}

コメント

タイトルとURLをコピーしました