Tôi đang gặp phải một lỗi nghiêm trọng: chưa nắm bắt được mysqli_SQL_Exception trong mã PHP chỉnh sửa của tôi

lập trình


Xin chào! Tôi đang tạo một bảng đơn giản cho một dự án trường học và tôi thấy hướng dẫn này hữu ích
“https://www.youtube.com/watch?v=NqP0-UkIQS4″>
PHP và MySQL với các hoạt động CRUD: Tạo, Đọc, Cập nhật, Xóa – YouTube
Tôi đã làm theo mọi thứ nhưng khi cập nhật/chỉnh sửa bảng của mình thì kết quả luôn là:

Lỗi nghiêm trọng: MySQLi_sql_Exception chưa được phát hiện: Bạn có lỗi trong cú pháp SQL; hãy kiểm tra hướng dẫn sử dụng tương ứng với phiên bản máy chủ MariaDB của bạn để biết cú pháp phù hợp để sử dụng gần ‘= `2023-03-22T11:50:28`, Number_Of_Items = `5`, Item = `Tempra`, Expiration_D…’ tại dòng 1 trong C:\xampp\htdocs\Inven\edit.php:75 Dấu vết ngăn xếp: #0 C:\xampp\htdocs\Inven\edit.php(75): mysqli_query(Object(mysqli), ‘UPDATE Clinic_i… ‘) #1 {main} được đưa vào C:\xampp\htdocs\Inven\edit.php trên dòng 75.

Xin lỗi vì tiếng Anh không tốt, không phải ngôn ngữ đầu tiên của tôi và cảm ơn bạn.

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

query($sql);
	$row = $result->fetch_assoc();

	if (!$row) {
		header("location: /inven/index.php");
		exit;
	}


$Date_Received = $row["Date_Received"];
$Number_Of_Items = $row["Number_Of_Items"];
$Item = $row["Item"];
$Expiration_Date = $row["Expiration_Date"];
$Last_Updated = $row["Last_Updated"];
$Quantity = $row["Quantity"];

}
	else{

$id = $_POST["id"];
$Date_Received = $_POST["Date_Received"];
$Number_Of_Items = $_POST["Number_Of_Items"];
$Item = $_POST["Item"];
$Expiration_Date = $_POST["Expiration_Date"];
$Last_Updated = $_POST["Last_Updated"];
$Quantity = $_POST["Quantity"];

	do {
		if ( empty($id) || 
			empty($Date_Received) || 
			empty($Number_Of_Items) || 
			empty($Item) || 
			empty($Expiration_Date) || 
			empty($Last_Updated) || 
			empty($Quantity) ) 
			{ $errorMessage= "All the Fields are required";
				break;
		} 

		$sql = "UPDATE clinic_inventory" .
			"SET Date_Received = `$Date_Received`, Number_Of_Items = `$Number_Of_Items`, Item = `$Item`, Expiration_Date = `$Expiration_Date`, Last_Updated = `$Last_Updated`, Quantity = `$Quantity`" . "WHERE id = $id";
		
			$result = mysqli_query($connection, $sql);

			if (!$result) {
			$errorMessage = "Invalid Query: " . $connection->error;
			break;
		}

			$successMessage = "Item Successfully Added";
			header("location: /inven/index.php");
			exit;
			
}	while (false);
	
}


?>

Giải pháp 1

Trong SQL, nên sử dụng dấu ngoặc đơn cho các giá trị chuỗi chứ không phải dấu ngược. Ngoài ra, còn thiếu một khoảng trống trước ‘SET’ trong truy vấn của bạn có nội dung là – “UPDATE Clinic_inventorySET. SQL của bạn sẽ giống như –

PHP
$sql = "UPDATE clinic_inventory SET " .
       "Date_Received = '$Date_Received', " .
       "Number_Of_Items = '$Number_Of_Items', " .
       "Item = '$Item', " .
       "Expiration_Date = '$Expiration_Date', " .
       "Last_Updated = '$Last_Updated', " .
       "Quantity = '$Quantity' " .
       "WHERE id = $id";

Bạn cũng đang để ngỏ khả năng chèn SQL, thay vào đó bạn nên sử dụng các câu lệnh đã chuẩn bị sẵn và các truy vấn được tham số hóa – Báo cáo đã chuẩn bị và các thủ tục lưu trữ[^]

Mã của bạn, theo ước tính sơ bộ, sẽ trông như thế này –

PHP
$sql = "UPDATE clinic_inventory SET " .
       "Date_Received = ?, " .
       "Number_Of_Items = ?, " .
       "Item = ?, " .
       "Expiration_Date = ?, " .
       "Last_Updated = ?, " .
       "Quantity = ? " .
       "WHERE id = ?";

$stmt = $connection->prepare($sql);

if ($stmt) {
    $stmt->bind_param("ssssssi", $Date_Received, $Number_Of_Items, $Item, $Expiration_Date, $Last_Updated, $Quantity, $id);

    $stmt->execute();

    if ($stmt->affected_rows > 0) {
        //Your query was successful...
        $successMessage = "Item Successfully Added";
        header("location: /inven/index.php");
        exit;
    } else {
        //Handle error/s...
        $errorMessage = "Error updating item: " . $stmt->error;
    }

    $stmt->close();
} else {
    //Handle error/s...
    $errorMessage = "Error preparing statement: " . $connection->error;
}

コメント

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