sql >> Databasteknik >  >> RDS >> Mysql

Stoppa sql från att uppdatera tomma eller tomma fält från mitt uppdateringsformulär

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

Detta subordnar jobbet att leta efter tomma poster till MySQL och fältet använder dess tidigare värde istället för ett tomt värde. Du måste skicka värdet till execute() två gånger för att detta ska fungera. Den gör i princip samma sak som du gör men utan att behöva lagra värdet i din PHP-session.

Med detta tillvägagångssätt skulle din uppdateringskod se ut så här:

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

Din befintliga kod skulle ha hindrat användaren från att ange en enda 0 på egen hand, vilket detta inte gör - du kanske vill lägga till en check för det också.



  1. Avancerad SQL:Variationer och olika användningsfall av T-SQL Insert Statement

  2. Hur kan jag kombinera flera rader till en kommaavgränsad lista i Oracle?

  3. Syntaxfel för MySQL PÅ DUBLIKATNYCKELUPPDATERING

  4. MySQL Select och IF() uttalande