• 締切済み

PHPで更新するデータにNULLが入っている場合

PHP初心者です。 PHPでSQLのUPDATEをしようと思っているのですが、更新するデータがNULLの場合、もとのデータを更新しない、という処理をしたいと思っています。 例えば、 ユーザID、ユーザ名、メールアドレス、と言ったテーブルがあった場合、 ユーザID=null、ユーザ名=null、メールアドレス=xxxxx@gmail.com と更新するとき、 ユーザIDとユーザ名は更新せずに、メールアドレスだけ更新するには、どういった処理をすればいいのでしょうか?

  • PHP
  • 回答数2
  • ありがとう数7

みんなの回答

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.2

SQL文を組み立てるときにチェックする(NULLだったらSQL文に含めない)しかないと思いますが・・・ $param = array(); $value = array(); if (!is_null($userid)) { $param[] = 'userid=?'; value[] = $userid; } if (!is_null($username)) { $param[] = 'username=?'; value[] = $username; } if (!is_null($mail)) { $param[] = 'mail=?'; value[] = $mail; } if (count($param) > 0) { $stmt = $pdo->prepare('update table_name set ' . implode(', ', $param) . ' where (所定の条件)'); $stmt->execute($value); 「所定の条件」が謎です。普通はユーザーIDがプライマリキーになるので、where user_id = ? になるんですが・・・ >更新するデータがNULLの場合 ということなので、is_null でチェックしてますが、本当に NULL ですか?POSTデータが「空文字列」とかいう条件じゃないですよね(空文字列と NULL は別のものなので)。

noname#244856
noname#244856
回答No.1

UPDATE table SET メールアドレス=値 WHERE 条件 ・PHPじゃなくてSQLの質問です。 ・基礎的なデータに関しては普通「NOT NULL」をつけてNULLを許可しない構成にすると思うのですが、「ユーザー名」ならまだしも一意性を保証する「ユーザーID」がNULLになる状況がわかりません。

関連するQ&A

  • PHP pdo データが無い場合とある場合

    tablename( id int not null, name text not null, age int ); 的なテーブルがあったとして、id番号と名前は必ずデータがあるが、年齢はデータがあったり無かったりするとします。 $id = 1; $name = "太郎"; $age = ""; だったり $age = "25";だったり シンプルにinsert 書きたいのですが、やはり$ageが空文字の場合と数字で構成される文字の場合でわけないと書けないでしょうか? $sql = "insert into tablename( id,name,age) values (:id,:name,:age); $stmt = $pdo->prepare($sql); $stmt->bindValue(":id", $id, PDO::PARAM_INT); $stmt->bindValue(":name", null, PDO::PARAM_STR); if ($age === "") { $stmt->bindValue(":age ", null, PDO::PARAM_NULL); } else { $stmt->bindValue(":age ", $age , PDO::PARAM_INT); } とわけないと無理?

    • 締切済み
    • PHP
  • データの追加、更新について

    現在、PHPとMySQLにて、会員登録のシステムを構築しています。 初歩的なことかとは存じますが、以下のような場合どのような形にするのが良いのかアドバイスいただけますでしょうか。 データベースのテーブルのフィールドに、 メールアドレス登録用のフィールドがあり、 デフォルトはNULLとしています。 メールアドレス自体は任意の入力項目となっており、 空の場合もあります。 入力が空の場合は、データ追加あるは更新の際、 メールアドレスのフィールドには空文字を入れるのが良いのでしょうか。あるいは「NULL」としておく方が良いのでしょうか。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • Null値を入れるには?

    初歩的な質問です! SQLでデータの更新をかけたいんですが、データがNull値でもUPDATEできるようにしたいんです。 DB側でNull値の許可をしていたら問題なく動くと思ったんですが…現在Access2000を使用しています。 そこで、VBAを使ってSQLでUPDATEをかけようとしているんですが、Null値を受け取ってくれません。 受け取ってくれないため、操作ができなくなってしまいました(/_;) そこで、Null値のUPDATEの方法を教えてください。 よろしくお願いします。

  • PHPとjQueryでツリー

    はじめまして。プログラムを独学で学んでいる者です。 今回初めて開発をしてみたのですが、どうしてもうまくいかないため こちらに投稿した次第です。 やりたいことは以下の通りです。 PHPとJQueryツリー構造 (完成図) 親 ■ツリー(1)  |  ■親データ(2)  | |  |  ∟■子データ(3)  |    |  |     ∟■孫データ(4)  |       |  |        ∟■孫2データ(5)  |  ■親データ  | |  |  ∟■子1データ  |  ■親データ  | |  |  ∟■子1データ  | |  |  | |   ∟■孫1データ  | |  |  ∟■子2データ  |  ■親データ  | |  |  ∟■子1データ  |    |  |     ∟■孫1データ  |       |  |        ∟■孫2データ  |  ■親データ 表示部分で親データの表示をだしつつ、子データのSQLをとばして子データの表示をだしつつ、孫データのSQLをとばす。 これを繰り返したい。 (1)まず親データのSQLをとばす。 (2)親データを一件取得したら、表示する。その親SQLで得られた結果をもとに子SQLをとばす。 (3)子データがあれば表示。(なければ2件目の親データを取得。) 子SQLで得られた結果をもとに、さらに子SQLを飛ばす。 (4)そこに結果があれば孫データとして表示。(なければ2件目の親データを取得) 得られた結果をもとに子SQLを飛ばす。 (5)結果があれば次の孫データとして表示。 結果が存在しなければ、親データに戻り・・・・繰り返し上記のように処理する。 自分で試行錯誤し、phpとjQueryでなんとか上図のように親--子--孫と出せるようになりました。 しかし、1件ごとに子・孫データが無いかSQLを飛ばして調べるので、非常に時間がかかります。 データが30件ほどあると表示するのに10分はかかります。 処理しきれずに途中で終わってしますこともシバシバ・・・・。 他の方法として考えたのが、親データがクリックされたら子SQLを飛ばして展開部分を表示するという方法です。 しかしクリックしたらメソッドを呼び出すという、phpの処理を分割することはできないとネットに乗っていました。 (私の調べ方に問題があったのかもしれませんが・・・) <ul> <li id=id>親データ   <ul>     <li id=id2>子データ      <ul>      <li id=id3>孫データ      </ul>  </ul> <li id=id>親データ2 ・ ・ ・ ↑のような構造で「<li id=id>親データ」がクリックされたときに、phpの子SQLをなげる仕組みなどは 可能なのでしょうか? それとも地道にSQLを投げて1件ずつ確認する方法しかないのでしょうか? プロの方の意見等、知恵をお借りしたいです。 ご教授よろしくお願い致します。

    • 締切済み
    • PHP
  • ID番号がnullのデータを削除する方法は?

    +------+----------+----------------+----------+ | id | name | address | hobby | +------+----------+----------------+----------+ | 1 | 武田信玄 | 山梨県甲府市 | NULL | | 2 | 毛利元就 | 広島県広島市 | NULL | | NULL | NULL | NULL | 2 | | NULL | NULL | NULL | 1 | +------+----------+----------------+----------+ というテーブルBUSHOがあります。 この表の3行目4行目のデータを削除したいので、 mysql> delete from BUSHO where id="null"; とすると、 Query OK, 0 rows affected (0.08 sec) となってデータは削除されません。 (id=null; id="NULL"; でもできません。) idがnullの場合のデータ削除はどのように行うのでしょうか?

    • ベストアンサー
    • MySQL
  • PHPからMySQLのデータが表示できない

    〇質問の主旨 PHPでMySQLのデータベース(テーブル)から データを表示させようと考えていて、 一度目は表示させることはできました。 しかし同じURLでブラウザをリロードしたところ、 二度目は表示されません。 もう一度データを表示させるためには、 どのあたりをチェックすればよいでしょうか? ご存知の方がいらっしゃいましたら、 ご教示願います。 〇質問の補足 PHPによるコードとMySQLによるクエリ文は次のとおりです。 現在、PHPの「処理1」にある"Success!"は表示させることができますが、 「処理2」は表示させることはできません。 ・コード <?php // データベースの接続 try { $dbh = new PDO('mysql:host=localhost;dbname=mydatabase', 'myname','mypassword'); } catch(PDOException $e) { var_dump($e->getMessage()); exit; } // 処理 1 echo "Success!"; // 処理 2 $sql = "select * from users"; $stmt = $dbh->query($sql); foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $user) { var_dump($user['name']); } echo $dbh->query("select count(*) from users")->fetchColumn() . "records found"; // 切断 $dbh = null; ・クエリ文 create table users ( id int(11) not null auto_increment primary key, name varchar(50), email varchar(255) unique, password char(16) ); insert into users (name,email,password) values ('hoge','hoge@dummy.com','abc'); insert into users (name,email,password) values ('foo','foo@dummy.com','def'); 以上、よろしくお願い申し上げます。

    • ベストアンサー
    • PHP
  • データコンボのNullについて

    何度もすいませんm(__)m データコンボで 値が選択されてない場合は nullをデータベースに格納したいんですが、 できません。nullの使い方が不正です。と出ます。 教えてください。 VB6を使ってますデータベースはMySQLです。 Dim id As Integer If Me.DataCombo1.Text = "" Then id = Null Else id = Me.DataCombo1.SelectedItem End If datacombo1はInteger型のデータを データベースに格納します

  • PHP+mysql データ重複登録

    ◆PHPバージョン 5.3.3 ◆mysqlバージョン 4.1.22 ◆テーブル情報 `no` int(11) NOT NULL auto_increment, `name` text NOT NULL, `mail` text NOT NULL, `memo` text NOT NULL, `updating` timestamp NOT NULL default CURRENT_TIMESTAMP, PRIMARY KEY (`no`) ENGINE=MyISAM DEFAULT CHARSET=utf8 ◆SQL (1)insert into test(name, mail, memo) values ('abc','abc@test.com','abc') (2)insert test set name='abc', mail='abc@test.com', memo='abc' ◆処理概要 $conn = mysql_connect(ホスト、ユーザ、パスワード); mysql_query("set names utf8"); $rs = mysql_select_db(DB名, $conn); $result = mysql_query(SQL, $conn); ◆登録情報 (1, 'abc', 'abc@test.com', 'abc', '2011-09-02 16:28:57'), (2, '', '', '', '2011-09-02 16:28:57'), 【問題】 上記SQL(1)、(2)どちらでDBに登録しても、登録情報のように同時に空データも同時に登録されてしまう 全く原因の検討がつかないので、何か手がかりがありましたらご教授頂けたらと思います。 どうぞよろしくお願いします。

    • ベストアンサー
    • MySQL
  • 数日経過した後にNULLに変換する処理は???

    SQLでテーブルのある項目に入っている日付がSYSDATEから数日経過した場合、NULLに変換する処理をしたいのですが・・・ 例えば、SYSDATEが「2011/10/22」だとします。 テーブルの内容が下記のようだとします。 日付 -------------- 2011/12/24 2011/10/22 2011/10/14 2011/09/30 2011/11/11 そして、SYSDATEより7日経過したデータをNULLにする処理を走らせると結果をこうしたいのです。 日付 -------------- 2011/12/24 2011/10/22 2011/11/11 ここまでは、特に難しいことではないのですが、この処理に加えて「土」、「日」を考慮する処理を入れたいのです。 例えば、NULL対象データが土曜だったら9日経過するまで消さない、日曜だったら8日経過するまで消さないような処理にしたいのです。 これを単純なSQL文だけでできないでしょうか? あと余談ですが・・・例えば企業の休み(お盆、正月、もしくは祝日など)を考慮したい場合、休みのデータを持ったテーブルを作るほうが無難ですか?それともSQL単文でも可能でしょうか?(長い文かつ効率が悪くても・・・)

  • Accessでデータ更新できない

    Accessのクエリでデータを書き換えようとしてもできません。データベースは、更新可能な権限でアクセスしており、データソースも読み取り専用にチェックをつけていません。SQL*plusにて、おなじサービス名、ユーザー、パスワードで、updateはできるのです。どなたかご教授お願いします。

専門家に質問してみよう