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 đó.