sql >> データベース >  >> RDS >> Mysql

SQLが更新フォームの空白または空のフィールドを更新しないようにします

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

    これは、MySQLへの空のエントリをチェックするジョブをサブ化し、フィールドは空の値の代わりに以前の値を使用します。値をexecute()に渡す必要があります これが機能するために2回。これは基本的にあなたがしているのと同じことをしますが、PHPセッションに値を保存する必要はありません。

    このアプローチを使用すると、更新コードは次のようになります。

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

    既存のコードは、ユーザーが単一の0を入力するのを阻止しているでしょう。 それ自体では、これはできません。そのためのチェックも追加することをお勧めします。



    1. 内部結合からmysqlテーブルを作成する

    2. find_by_sqlエイリアスを使用していたとき、混乱しました

    3. MySQL列をAUTO_INCREMENTに変更します

    4. zenddbモデルで「distinct」を使用する方法