アプリ版:「スタンプのみでお礼する」機能のリリースについて

プログラム初心者です

空文字をdbに入れた場合、dbのカラムの値はなしになるのでしょうか?
それとも、見えないけどなにか入ってしまうのでしょうか?

nameが空文字の場合

$name = $_POST['neme'];

UPDATE table SET name=$name WHERE id=1


空文字はNULLを指定した場合と同じ結果になりますか?
UPDATE table SET name=NULL WHERE id=1

よろしくお願いします

A 回答 (5件)

取り違えがありましたね、これで問題ないでしょうか?「値を削除」=「NULLをセット」として考えました。

今回のケースではプリペアドステートメントを使わない方がスッキリするかも。

$name = isset($_POST['name']) && is_string($_POST['name']) ? $_POST['name'] : '';
if ($name !== 'null') { $name = "'" . mysqli_real_escape_string($link, $name) . "'"; }
mysqli_query($link, "UPDATE table SET name = {$name} WHERE id = 1");

ちなみにOracleはNULLを空文字列と同一視することを今後も保証し続けるかどうかは分からないとしています。今回利用しているのはMySQLなので関係ないですが。
    • good
    • 0
この回答へのお礼

回答ありがとうございます
自分でも実験してみました
空文字をアップしてみてから空文字をselectしてみると空文字が検索できました(空文字見えないけどはいってる!)
nullとの違いがわかりました。

お礼日時:2014/01/05 23:37

>空文字をdbに入れた場合、dbのカラムの値はなしになるのでしょうか?


>それとも、見えないけどなにか入ってしまうのでしょうか?
使うDBに依存する。
Oracleだとnullと空文字は同じ物。
MS SQL Server、MySQL、PostgreSQLはnullは別物扱いする。
一律でnullと空文字は違いますなんて回答する人はド素人です。(自分がプログラミングできていると勘違いしている人)
空文字を渡すのかnullを渡すのかselectなどの条件句などでの挙動も変わってくるから注意。

>$name = isset($_POST['name']) && is_string($_POST['name']) ? $_POST['name'] : '';
>if ($name === 'null') {
ここ自分で書いていて変だと思わなかったのか?
もっとも
>その日本語をそのままPHPコードにするだけですね。何も難しいことはありません。
だけど
>文字列nullをpostした場合だと、空文字をいれるのではなくdbの値を削除できますか?
>dbのカラムの値はなしになるのでしょうか?
から普通に判断されるなら消したいのは行ではなくてカラムだよね?
    • good
    • 0
この回答へのお礼

すいません。自分の質問の仕方が悪かったです

mysqlのnameのカラムの値に空文字が入ってしまった場合、どうゆう挙動をするのか知っておかなければと思って質問しました

カラムに空文字を入れても問題ないでしょうか?(例えばdb容量が増えるとか空文字でselectできてしまうとか)

お礼日時:2014/01/05 21:51

>> HTMLフォームから送る時に、文字列nullをpostした場合だと、空文字をいれるのではなくdbの値を削除



その日本語をそのままPHPコードにするだけですね。何も難しいことはありません。

$name = isset($_POST['name']) && is_string($_POST['name']) ? $_POST['name'] : '';
if ($name === 'null') {
mysqli_query($link, 'DELETE FROM table WHERE id = 1');
} else {
$stmt = mysqli_prepare($link, 'UPDATE table SET name = ? WHERE id = 1');
mysqli_stmt_bind_param($stmt, 's', $name);
mysqli_stmt_execute($stmt);
}

# 「mysqli_stmt_bind_param」「mysqli_stmt_execute」とか関数名長すぎて毎回オブジェクト指向で書きたくなる
    • good
    • 0
この回答へのお礼

回答ありがとうございます。勉強になりました(_ _

お礼日時:2014/01/05 21:32

空文字というのがスペースだった場合、カラムにはスペースが入力されます。


NULLというのは項目値を設定しなかった場合の初期値ですので、
今回スペースが入力されているため、name=NULLでは表示されません。
name=" "などで表示できるのではないでしょうか。
    • good
    • 0
この回答へのお礼

回答ありがとうございます
スペースは入って無かったです

お礼日時:2014/01/05 21:28

nullと空文字は違いますよ。


nullは何も入っていない状態。
空文字は空文字が入っている状態。
    • good
    • 0
この回答へのお礼

回答ありがとうございます
HTMLフォームから送る時に、文字列nullをpostした場合だと、空文字をいれるのではなくdbの値を削除できますか?
※mysqlです

<select name="name">
<option value="null">
</select>


$name = $_POST['neme']; //$nameの値はnull

UPDATE table SET name=$name WHERE id=1

お礼日時:2014/01/05 14:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!