sql >> Database >  >> RDS >> Mysql

Voorkom dat sql lege of lege velden van mijn updateformulier bijwerkt

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

Dit vervangt de taak van het controleren op lege vermeldingen naar MySQL en het veld gebruikt de vorige waarde in plaats van een lege waarde. U moet de waarde doorgeven aan execute() twee keer om dit te laten werken. Het doet in principe hetzelfde als wat u doet, maar zonder dat u de waarde in uw PHP-sessie hoeft op te slaan.

Als u deze benadering gebruikt, ziet uw updatecode er als volgt uit:

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

Uw bestaande code zou de gebruiker ervan hebben weerhouden om een ​​enkele 0 . in te voeren op zichzelf, wat dit niet zal doen - misschien wilt u daar ook een cheque voor toevoegen.



  1. Volledig herstel van een MySQL- of MariaDB Galera-cluster vanuit back-up

  2. Oracle Update Query met behulp van Join

  3. Illegale mix van sorteringen voor operatie 'concat'

  4. PHP meerdere object functie-aanroepen