MySQLデータベースにNULLとして格納する方法

このQ&Aのポイント
  • MySQLデータベースにNULLとして格納する方法について教えてください。
  • テキストフィールドに何も記述されていない場合にNULLとして追加したいですが、どうすればよいですか?
  • 現在、空白が格納されてしまいます。NULLとして格納する方法を教えてください。
回答を見る
  • ベストアンサー

データベース(MySQL)にNULLとして格納

下記サイトを参考にサイト上からデータベース(MySQL)のテーブルにレコードを追加できるようにしました。 http://ponk.jp/php/basic/php_mysql#page_index3 レコードの追加自体はできたのですが、テキストフィールドに何も記述されていない場合にNULLとして追加したいと思っているのですが、その方法が分かりません。 コードは次のようにしました。 $number = isset($_POST["number"]) ? $_POST["number"] : 'NULL'; $st = $pdo->prepare("INSERT INTO player(number) VALUES(?)"); $st->execute(array($number)); このコードで追加をすると、NULLではなく空白が格納されてしまいます。 どこを修正すればNULLとして格納できるようになるでしょうか? ご存知の方いらっしゃいましたらご教示ください。 よろしくお願いします。

  • PHP
  • 回答数3
  • ありがとう数8

質問者が選んだベストアンサー

  • ベストアンサー
  • maiko0318
  • ベストアンサー率21% (1483/6970)
回答No.3

$number= ($_POST["number"]!="") ? $_POST["number"] : NULL; でどうなります?

taisuke1151
質問者

お礼

回答ありがとうございます。 >$number= ($_POST["number"]!="") ? $_POST["number"] : NULL; 仰る通りにしたらINT型にもVARCHAR型にもNULLが入りました。 本当にありがとうございました。

その他の回答 (2)

  • maiko0318
  • ベストアンサー率21% (1483/6970)
回答No.2

$number= isset($_POST["number"]) ? $_POST["number"] : 'NULL'; これ、なにか引っかかります。 $number= 'NULL'; にしたらどうなります?

taisuke1151
質問者

補足

回答ありがとうございます。 isset($_POST["number"])だと何故か全てTRUEになってしまうみたいだったのでIF文を変えてみました。 $number = ($_POST["number"]!="") ? $_POST["number"] : "NULL"; これだと変数に「NULL」を代入することはできたのですが、カラムがINT型だと「0」が、VARCHAR型だとそのまま「NULL」がテキストとして格納されてしまいました。

  • maiko0318
  • ベストアンサー率21% (1483/6970)
回答No.1

テーブルの作成時、該当カラムにはNOT NULL は指定していないですか? ちょとわかりませんけど、NULL ではなくて null でやってみてください。

taisuke1151
質問者

補足

回答ありがとうございます。 カラムを追加した時にデフォルト値にNULL、チェックも入れています。 自作のフォームからはNULLが追加できないため、phpMyAdminから開いてNULLにチェックしてNULLを入れています。 >ちょとわかりませんけど、NULL ではなくて null でやってみてください。 nullでやってみましたが、結果は同じでした。

関連するQ&A

  • php pdo データベース

    前に書き込んだのが状況がわかったので再度書きます update.phpでGETで取った番号のデータを表示します 番号は主キーなので変更できないように表示のみにします update.phpのフォームをuptate2.phpに送ります <?php $ID = htmlspecialchars($_GET['番号']); $pdo = new PDO("mysql:dbname=db_test;host=localhost", "root", "admin"); $st = $pdo->prepare("SELECT * FROM tbl_test WHERE 番号=?"); $st->execute(array($ID)); $row = $st->fetch(); $NAME = htmlspecialchars($row['氏名']); $ADDR = htmlspecialchars($row['住所']); ?> <form action="update2.php" method="post"> 番号<br> <?php echo $ID ?><br> <input type="hidden" name="ID" value="<?php echo $ID; ?>"> 氏名<br> <input type="text" SIZE = "50" NAME="NAME" value="<?php echo $NAME ?>"><br> 住所<br> <input type="text" SIZE = "130"NAME="ADDR" value="<?php echo $ADDR ?>"><br> <input type="submit"> </form> アップデ-トphp update2.php <?php $pdo = new PDO("mysql:dbname=db_test;host=localhost", "root", "admin"); $st = $pdo->prepare("UPDATE tbl_test SET 氏名=?,住所=?WHERE 番号=?"); $st->execute(array($_POST['ID'],$_POST['NAME'], $_POST['ADDR'])); ?> レコードを修正しました。 今の現状 エラーが出ないでレコードを修正しました。と表示されるがレコードが修正されていない どこがいけないと思いますか?

    • ベストアンサー
    • PHP
  • PHP Mysql エラー

    データの新規登録を行っているのですが 番号が重複しないでまたデータがすべて入力されたらデータの追加を行いたいのですが エラーが出て対処できずに困っています 下記のエラーがでます Parse error: syntax error, unexpected end of file in C:\WWW\test\htdoes\insert.php on line 20 20行目は一番下の行です <html> <body> <?php $pdo = new PDO("mysql:dbname=db_test;host=localhost", "root", "admin"); if($st->rowCount()>0){ if ($_POST['ID'] != '' && $_POST['NAME'] != '' && $_POST['ADDR'] != ''){ $st = $pdo->prepare("insert ignore into tbl_test values(?,?,?)"); $st->execute(array($_POST['ID'], $_POST['NAME'],$_POST['ADDR'])); header('Location: http://localhost/top.php'); }else{ print データ未入力の場所があります; } }else{ print "既に登録している番号です"; ?> </body> </html>

    • ベストアンサー
    • MySQL
  • php データベース更新

    番号 int プライマリーキー 氏名  varchar 住所 varchar 一覧画面に修正というボタンをつくりボタンクリックすると入っているデータがテキストボックスで表示され入力できるようにした。 番号は主キーなので表示のみにして編集できないようにした ソース GETで番号をとりupdate2.phpにわたす update.php <?php $ID = htmlspecialchars($_GET['番号']); $pdo = new PDO("mysql:dbname=db_test;host=localhost", "root", "admin"); $st = $pdo->prepare("SELECT * FROM tbl_test WHERE 番号=?"); $st->execute(array($ID)); $row = $st->fetch(); $ID = htmlspecialchars($row['番号']); $NAME = htmlspecialchars($row['氏名']); $ADDR = htmlspecialchars($row['住所']); ?> <form action="update2.php" method="post"> 番号<br> <?php echo $ID ?><br> 氏名<br> <input type="text" SIZE = "50" NAME="NAME" value="<?php echo $NAME ?>"><br> 住所<br> <input type="text" SIZE = "130"NAME="ADDR" value="<?php echo $ADDR ?>"><br> <input type="submit"> </form> アップデートphpは下記のとおり update2.php <?php $pdo = new PDO("mysql:dbname=db_test;host=localhost", "root", "admin"); $st = $pdo->prepare("UPDATE tbl_test SET 氏名=?,住所=?WHERE 番号=?"); $st->execute(array($_POST['ID'],$_POST['NAME'], $_POST['ADDR'])); ?> レコードを修正しました。 だかupdate2.phpでエラ-がおきて先に進めません

    • ベストアンサー
    • PHP
  • phpでnot null、a_iでテーブル作成

    PHPで、以下のようなソースで、存在しているデータベースtestに接続し、もしない場合、name_listというテーブルを作り、1カラム目をカラム名がnoで、int型でnot null auto_incrementにして、2カラム目をカラム名がnameで、not nullで作りたいのですが、うまくテーブルが作られません。 どうすればうまく作られるか教えてください。 <?php try{ $pdo = new PDO('mysql:dbname=test; host=localhost; charset=utf8', 'root'); $st = $pdo->prepare("create table if not exists name_list (no int(100) not null auto_increment, name varchar(100) not null);"); $st->execute(); }catch(PDOException $e){ print('Error:'.$e->getMessage()); die(); }

    • ベストアンサー
    • MySQL
  • php、sqlite3にデーター追加できない

    phpでsqlite3のデーターベースにデーターの追加が出来ず困ってます。 コードは以下の通りです。 <?php //変数のセット $name = $_POST["name"]; $usrid = $_POST["usrid"]; $usrpw = $_POST["usrpw"]; $email = $_POST["email"]; $ddate = $_POST["ddate"]; //データーベース接続 $dbh = new PDO("sqlite:data",null,null); //新規登録 $sql = "INSERT INTO meibo (name,usrid,usrpw,email,ddate) VALUES ('$name','$usrid','$usrpw','$email','$ddate')"; $sth = $dbh->prepare($sql); $sth->execute(); $dbh = null; localhostでは実験済なのですが webサーバーにアップすると追加が出来なくなります。 一覧表示や検索は可能な状態です。 どこに問題があるのかお分りの方、お教えいただけないでしょうか? 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • データベースの登録失敗の時の挙動について

    今PDOとphpを勉強中です。 フォームからデータベースにデータを登録できるようなサイトを作ったのですが、いくつか疑問点が出てきました。 まずデータベースのフィールドが5個くらいあり、テキストフォームも5個作り、5個の値をデータベースに飛ばし登録します。単純なプログラムなのですが、ユニーク設定などをしているとデータベースへの登録が失敗する事があります。 データ登録が失敗した場合「失敗しました」と画面に出したいのですが、 失敗したかどうか調べるPDOの関数はあるでしょうか?(今はちゃんと登録されているかどうかデータベースを開けないと分かりません) 詳しい方いましたらよろしくお願いします。 $st = $pdo->prepare("INSERT INTO aaa VALUES(?,?,?,?,?"); $st->execute(array($111,$222,$333,$444,$555));

    • 締切済み
    • PHP
  • mysql_queryがある場所について

    ZendFramework-1.11.7を使用しています。 Zend_DbでPdo_Mysqlで接続して利用しています。 そこで、クエリを実際に実行している箇所を探しているのですが、 ソースの中にmysql_queryが見つからないのです・・・ PHPとかでSQLを発行したい場合にはmysql_queryでやるんですよね?? ┬ Zend │└ Db │ ├ Statement.php ファイルには public function execute(array $params = null) { /* * Simple case - no query profiler to manage. */ if ($this->_queryId === null) { return $this->_execute($params); } があるのですが、これは $this->_execute($params); を実行していて ┬ Zend │└ Db │ ├ Statement │ │ ├ Pdo.php ファイルには public function _execute(array $params = null) { try { if ($params !== null) { return $this->_stmt->execute($params); } else { return $this->_stmt->execute(); } があるのですが、これは $this->_stmt->execute(); を実行しているようなのです。 なんか行ったり来たり(^^;)していて最終的にどこでSQLを発行(mysql_queryを実行)しているのかが フォルダ全体を文字列検索しても見つからないのです・・・ _stmtが何のオブジェクトなのかが定かではないので、追跡しづらいのかもしれませんが、 どこでSQLを発行しているのか教えて頂けないでしょうか?

    • ベストアンサー
    • PHP
  • 【PHP+MySQL 】レコード追加できない

    配列に入っているタブ区切りのデータを MySQLのテーブルに入れたいと思い 下記のようにコーディングしたのですが (因みにDB接続はちゃんと確立されております) ------------------------------------------ $arrData[0] = "1001 ^ あ"; $arrData[1] = "1002 ^ い";     ・     ・     ・ $sql = 'insert into table_a values (?,?)'; $stmt = $dbh->prepare($sql); for($i=0;$i<=count($arrData);$i++){ $tmp = split("\t",$arrData[$i]); $flag = $stmt->execute(array($tmp[0],$tmp[1])); if (!$flag){ die('データの追加に失敗しました'); } } ------------------------------------------ データの追加に失敗しましたが表示されうまくできません。 ■ どのように直せばよいかご教示願います。 ■ また、mysql関数にはPDO関数のprepare→executeのような 書き方は無いのでしょうか。 ご存知の方いらっしゃいましたら教えて下さい。 よろしくお願い致します。

    • 締切済み
    • PHP
  • mysql 接続について

    こんにちわ カートを作っていてつまづいたのでお力かしていただきたいです。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title></title> </head> <body> <?php try{ require_once('../common/common.php'); $post=sanitize($_POST); $pro_name=$post['name']; $pro_namecode=$post['namecode']; $pro_kg=$post['kg']; $pro_price=$post['price']; $pro_gazou_name=$_POST['gazou_name']; $pro_gazou_name2=$_POST['gazou_name2']; $dsn='mysql:dbname=LAA******-******;host=mysql***.phy.lolipop.lan'; $user='LAA******'; $password='********'; $dbh=new PDO($dsn,$user,$password); $pdo=new PDO("mysql:host=mysq***.phy.lolipop.lan;dbname=LAA*****-*******;charset=utf8",'LAA*****','********←パスワード'); $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);                                                 $sql='INSERT INTO mst_product(namecode,name,kg,price,gazou,gazou2) VALUES(?,?,?,?,?,?)'; $stmt=$dbh->prepare($sql); $data[]=$pro_namecode; $data[]=$pro_name; $data[]=$pro_kg; $data[]=$pro_price; $data[]=$pro_gazou_name; $data[]=$pro_gazou_name2; $stmt->execute($data); $dbh=null; print$pro_name; print'を追加しました。<br/>'; } catch(Exception $e) { print'ただいま障害により大変ご迷惑をおかけします。<br/>'; exit(); } ?> <a href="pro_list.php">戻る</a> </body> </html> 一応エラーもでないで最後のprint$pro_name;print'を追加しました。<br/>'; までいくんですがデータベースを見ても商品は追加されていません。 エラーもでないで最後まで行くということは一応接続は出来ているということ なんでしょうか? どうしたらきちんと商品登録でしますか? レンタルサーバーはロりポップです。 必要かは分からないんですが phpバージョンは5.3 データベースバージョン5.6 よろしくおねがいします。

    • ベストアンサー
    • MySQL
  • mysql データベース処理が途中で失敗したら?

    お世話になります。 現在、mysqlのデータベースを使ったphpプログラムを書いているのですが、 以下のように、続けて2つのデータベース処理を記述している部分があります。 $db=connectDb(); //処理1 $st1=$db->prepare("update table1 set title=:title where id=:id1 limit 1"); $st1->execute(array(":title"=>$title,":id"=>$id)); //処理2 $st2=$db->prepare("update table2 set image=:image where id=:id2 limit 1"); $st2->execute(array(":image"=>$image,":id"=>$id2)); db=NULL; ここで質問があります。 このような記述ですとなんらかの理由により、例えば、 「処理1のアップデート処理は成功したが、 次の処理2のアップデート処理には失敗してしまった。」 というような問題は起きることがあるのでしょうか? 起きることがある場合、それに備えてどのような記述をすれば対応できるでしょうか? ご存知の方、ご回答いただければ幸いです。 よろしくお願い致します。

    • ベストアンサー
    • PHP