Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Ngăn sql cập nhật các trường trống hoặc trống từ biểu mẫu cập nhật của tôi

UPDATE `tablename`
SET `field` = IF(? <> '', ?, `field`)
WHERE ...

Điều này thay cho công việc kiểm tra các mục nhập trống vào MySQL và trường sử dụng giá trị trước đó của nó thay vì giá trị trống. Bạn cần chuyển giá trị vào execute() hai lần để làm việc này. Về cơ bản, nó thực hiện những điều tương tự như bạn đang làm nhưng không cần phải lưu trữ giá trị trong phiên PHP của bạn.

Sử dụng phương pháp này, mã cập nhật của bạn sẽ trông giống như sau:

/*
  This block is no longer necessary
if($_POST['firstname']){ $firstname = $_POST['firstname']; }
else { $firstname = $_SESSION['uname']['firstname']; }

if($_POST['lastname']){ $lastname = $_POST['lastname']; }
else { $lastname = $_SESSION['uname']['lastname']; }

if($_POST['email']){ $email= $_POST['email']; }
else { $email = $_SESSION['uname']['email']; }
*/

$query = "
  UPDATE `users`
  SET
    `firstname` = IF(? <> '', ?, `firstname`),
    `lastname` = IF(? <> '', ?, `lastname`),
    `email` = IF(? <> '', ?, `email`)
  WHERE `id` = ?
";

$results = $condb->prepare($query);

$results->execute(array(
  $_POST['firstname'], $_POST['firstname'],
  $_POST['lastname'], $_POST['lastname'],
  $_POST['email'], $_POST['email'],
  $_SESSION['uname']['id']
));

Mã hiện tại của bạn sẽ ngăn người dùng nhập một 0 của riêng nó, điều này sẽ không - bạn cũng có thể muốn thêm séc cho điều đó.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Di chuyển từ MariaDB sang MySQL - sự khác biệt

  2. mySQL Trở lại top 5 của mỗi danh mục

  3. Tôi không thể nhận truy vấn tham gia mysql này để tạo ra kết quả mong muốn

  4. Làm thế nào để chọn sum -or- 0 nếu không có bản ghi nào tồn tại?

  5. Mở rộng tập hợp kết quả GROUP BY và HAVING