![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
CGIからデータベースにデータを登録したいのですが。。
ブラウザ(文字コードはUTF-8)からデータをCGIで取得し、そのデータをMySQLに登録したいと考えています。
このようにしています。
$sth = $db->prepare("
INSERT INTO tbl (hiduke,code,namae,suryo,biko,sakuseibi,kosinbi)
VALUES($hiduke,$code,$namae,$suryo,$biko,$sakuseibi,$kosinbi)
");
$sth->execute;
$biko の部分にはデータが入ったり入らなかったりします。
この$bikoにデータが入っているときは、ちゃんとテーブルに登録されるのですが、
空の場合はテーブルに登録されないのです。
試しに、このようにしてみると
$sth = $db->prepare("
INSERT INTO tbl (hiduke,code,namae,suryo,biko,sakuseibi,kosinbi)
VALUES($hiduke,$code,$namae,$suryo,'',$sakuseibi,$kosinbi)
");
$sth->execute;
bikoの部分が空でちゃんと登録されます。
テーブル定義もbikoの部分はNULL値OKにしてあります。
bikoのデータ型がTEXTでもVARCHARでもダメです。
どうしてなのかわっぱりわからず、ここ数日、ずっと悩んでおります。
テーブルに登録するコードの直前で、$biko='';
としても登録されません。。
わかりづらい質問かと思いますが、ご不明点がございましたら
ご質問ください。
よろしくお願い致します。
No.1ベストアンサー
- 回答日時:
プレースホルダを使う or 変数をクォートで囲む
でどうでしょうか?
kuroizellさん
ありがとうございました!!!!
ここ数日、ずっとこれで悩んでいまして、ホントに泣きそうでした!!!
シングルクォーテーションで囲んだらテーブルにデータが入りました!!
これは何ででしょう??
変数の名前をそのまま入れているようなイメージがありますが、、、
あと、データは入ったのですが、文字化けしたテキストデータが入っていました。。。
これはどのように対処すればよろしいでしょうか?
重ね重ね申しわけございませんが、教えてください!!
No.2
- 回答日時:
すでに回答がありますが、プレースホルダでやると以下のようになります。
データが入らないところは、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と接続しているんだなー。。というのはわかるのですが、、
文字化けの対処をしているのはどの部分なのでしょうか。。。
良かったら教えてください!!
お願いします!!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- PHP PHP MySQLに画像を直接保存 2 2022/06/05 11:50
- SQL Server DBのテーブルの設計ができず困っています。 2 2023/06/29 16:43
- JavaScript 追加ボタンを押した際に ok ボタンを押した場合のみ入力値が追記されるようにしたいです 6 2022/05/29 09:57
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- PHP 重複を防ぐ記述について教えて下さい。 3 2023/04/03 14:35
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
- Oracle sqlで質問です。 Aテーブルの登録番号をキーにBテーブルから確認番号を取得したいのですが、Bテーブ 4 2023/05/18 13:08
- IT・エンジニアリング ドメイン駆動設計の値オブジェクトについて質問 1 2023/05/13 02:50
- その他(プログラミング・Web制作) COBOL数値転記をCOPY句内での仕様 6 2022/06/15 18:48
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
データベースにアクセス出来ま...
-
perlでdb(mysql)に接続
-
CGI(perl)データベースを教えて...
-
ユーザー定義関数に#NAME?が返...
-
Excel VBAでリンク切れをチェッ...
-
例外処理のフローチャートの記...
-
Perl5.8とPerl5.6は共存可能で...
-
VBAで別モジュールへの変数の受...
-
'Range'メソッドは失敗しました
-
XML::XPathで日本語検索するには
-
VBAで旧字体を異字体に一括で変...
-
どなたか教えてください
-
エクセルVBAでシートモジュール...
-
Excelシート内セル記述の違いに...
-
モジュールは設置するだけでは...
-
"JScript"が見つかりません!
-
同じコンボボックス、リストボ...
-
エクセルVBAで標準モジュー...
-
GD.pmでアルファチャンネルを持...
-
本当にPublicな変数(配列で)
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
fetchrow_arrayとfetchrow_hash...
-
perlからmysqlに接続できない
-
Oracleのデータベースに接続で...
-
逆引きできないホストやIPの制...
-
テキストデータをpostgreSQLの...
-
例外処理のフローチャートの記...
-
Excel VBAでリンク切れをチェッ...
-
エクセルVBAでシートモジュール...
-
「デバイスは PRN を初期化でき...
-
VBAで別モジュールへの変数の受...
-
VBでグローバル変数を宣言するには
-
Excel VBA 『Call』で呼び出す...
-
Excel VBA 定義されたプロージ...
-
VBA This Workbookモジュール...
-
ユーザー定義関数に#NAME?が返...
-
VBSがコンパイルエラーになりま...
-
Excel VBAで、ユーザーフォーム...
-
ArduinoのジャイロモジュールMP...
-
LCD ディスプレイを Raspberry ...
-
グラフのX,Y座標を取得したい
おすすめ情報