sql >> Databáze >  >> RDS >> Mysql

Zastavit SQL v aktualizaci prázdných nebo prázdných polí z mého aktualizačního formuláře

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

Tím je nahrazena úloha kontroly prázdných položek do MySQL a pole používá svou předchozí hodnotu místo prázdné hodnoty. Hodnotu musíte předat do execute() dvakrát, aby to fungovalo. Dělá to v podstatě to samé, co děláte vy, ale bez nutnosti ukládat hodnotu do vaší PHP session.

Při použití tohoto přístupu by váš aktualizační kód vypadal takto:

/*
  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']
));

Váš stávající kód by zabránil uživateli zadat jediný 0 samo o sobě, což nebude – možná budete chtít přidat kontrolu i na to.



  1. MySQL si myslí, že poddotaz je odvozen, když tomu tak není!

  2. mysql:smyčka přes tabulky a změna tabulky přidání indexu

  3. Přidejte měsíce k datu v PostgreSQL

  4. Jak získat měsíc z data v MySQL