- ベストアンサー
CGIからデータベースにデータを登録したい!なぜbikoが空だと登録されないのか?
- ブラウザからデータをCGIで取得し、MySQLに登録する方法について質問します。空の場合は登録されませんが、なぜでしょうか?
- テーブル定義はNULL値OKに設定しており、bikoのデータ型はTEXTでもVARCHARでも試してみましたが同じ結果でした。
- テーブルに登録するコードの直前で$biko=''としても登録されません。どうしてでしょうか?ご不明点があればお答えします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
プレースホルダを使う or 変数をクォートで囲む でどうでしょうか?
その他の回答 (1)
- _--_1l1_1_
- ベストアンサー率67% (102/152)
すでに回答がありますが、プレースホルダでやると以下のようになります。 データが入らないところは、undef を入れます。 (表示がくずれるので、スペース2文字を全角空白で書いています) use strict; use warnings; use DBI; # DB Name my $db_name = 'sqlite_test.db'; unlink $db_name; print '--- Connect DB', "\n"; my $dbh = DBI->connect( 'dbi:SQLite:dbname=' . $db_name, q{}, q{}, { RaiseError => 1 } ) || die "$db_name : $!"; my $sql; my $table = 'user_info'; print '--- Create Table', "\n"; $sql = "CREATE TABLE $table (id integer primary key, name varchar NULL)"; $dbh->do($sql); my $sth; print '--- Insert Record', "\n"; $sth = $dbh->prepare( 'INSERT INTO ' . $table . '(id, name) VALUES (?, ?)' ); $sth->bind_param( 1, '1' ); $sth->bind_param( 2, 'AAA' ); $sth->execute; $sth->bind_param( 1, '2' ); $sth->bind_param( 2, undef ); # NULL $sth->execute; print '--- Select Record', "\n"; $sql = 'select * from ' . "$table" . ';'; print $sql, "\n"; $sth = $dbh->prepare($sql); print '--- fetchrow_hashref', "\n"; $sth->execute; while ( my $row_hashref = $sth->fetchrow_hashref() ) { my $id = $row_hashref->{id}; my $name = $row_hashref->{name}; $id = 'NULL' if !defined $id; $name = 'NULL' if !defined $name; print "id:$id name:$name", "\n"; }
お礼
_--_1l1_1_さん ご親切にプログラムまで書いてくださってありがとうございました!! ですが、、私には難しすぎて理解ができないです。。。(泣 SQL文でDBと接続しているんだなー。。というのはわかるのですが、、 文字化けの対処をしているのはどの部分なのでしょうか。。。 良かったら教えてください!! お願いします!!
お礼
kuroizellさん ありがとうございました!!!! ここ数日、ずっとこれで悩んでいまして、ホントに泣きそうでした!!! シングルクォーテーションで囲んだらテーブルにデータが入りました!! これは何ででしょう?? 変数の名前をそのまま入れているようなイメージがありますが、、、 あと、データは入ったのですが、文字化けしたテキストデータが入っていました。。。 これはどのように対処すればよろしいでしょうか? 重ね重ね申しわけございませんが、教えてください!!