質問させてください。
PERL、DBI、MYSQL5でメールアドレスにマッチさせてデータを呼び出したいのですが動きません。
下記の(1)では動くのですが、(2)になるとダメになります。
■(1) #$noには'1'が入っています。
my $query = "select * from TABLE_NAME where no = $no ";
■(2) #$mailには'test@test.com'が入っています
my $query = "select * from TABLE_NAME where mail = $mail";
SQL文以外の部分は過去正常に動いているので問題無いと思います。
今回メールアドレスでwhereするというのが初めてですので、
なにかその部分でダメになっているのではと考えています。
ちなみに直接書いた場合(以下)は正常に動きます。
my $query = "select * from TABLE_NAME where mail = test\@test\.com";
なぜでしょう…
検索しても全く原因がわかりませんでした。
分かる方いらっしゃいましたらご回答いただければ幸いです。
よろしくお願いします。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
テーブル上でメール部分は文字列で定義していると思いますが、 SQL ではシングルクォー
テーションでくくったものが文字列となります。つまり、
select * from TABLE_NAME where mail = 'test@test.com';
という SQL を渡さなければなりません。
(以下、表示がくずれるの 1 バイトのスペースを全角のスペースにしていることに注意)
#!/usr/bin/perl
use strict;
use warnings;
use DBI;
my $db_name = 'sqlite_test.db';
unlink $db_name;
my $dbh = DBI->connect(
'dbi:SQLite:dbname=' . $db_name,
'', '',
{ AutoCommit => 0,
RaiseError => 1
}
) || die "$db_name : $!";
my $sql;
my $table = 'user_info';
print '--- Create Table', "\n";
$sql
= 'CREATE TABLE '
. $table
. '(id integer primary key, name string, mail string)';
$dbh->do($sql);
$dbh->commit;
my $sth;
print '--- Insert Record', "\n";
$sth = $dbh->prepare(
'INSERT INTO ' . $table . '(id, name, mail) VALUES (?, ?, ?)' );
$sth->bind_param( 1, '1' );
$sth->bind_param( 2, 'user' );
$sth->bind_param( 3, 'user@xxx' );
$sth->execute;
$dbh->commit;
print '--- Select Record', "\n";
my $mail = 'user@xxx';
my $quote_mail = $dbh->quote($mail);
$sql = "select * from $table where mail=$quote_mail;";
print $sql, "\n"; # select * from user_info where mail='user@xxx';
$sth = $dbh->prepare($sql);
$sth->execute;
while ( my $ref = $sth->fetch() ) {
for my $array_ref (@$ref) {
print "$array_ref\n";
}
}
$sth->finish();
$dbh->disconnect;
unlink $db_name;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
perlでdb(mysql)に接続
-
Excel VBAでリンク切れをチェッ...
-
例外処理のフローチャートの記...
-
LCD ディスプレイを Raspberry ...
-
VBSがコンパイルエラーになりま...
-
Excel VBA 『Call』で呼び出す...
-
本当にPublicな変数(配列で)
-
VBAで旧字体を異字体に一括で変...
-
「デバイスは PRN を初期化でき...
-
Excel VBAで、ユーザーフォーム...
-
ユーザー定義関数に#NAME?が返...
-
VBAで別モジュールへの変数の受...
-
エクセルVBAでシートモジュール...
-
perlをバージョンアップしたら...
-
perl 「予定」が「嵐閧オ」に...
-
'Range'メソッドは失敗しました
-
標準モジュールを削除したい。(...
-
ユーザーフォームに最小化・最...
-
SMTP-AUTH でメール送信
-
Form間の値の渡し方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
fetchrow_arrayとfetchrow_hash...
-
perlでdb(mysql)に接続
-
Oracleのデータベースに接続で...
-
例外処理のフローチャートの記...
-
Excel VBAでリンク切れをチェッ...
-
LCD ディスプレイを Raspberry ...
-
VBSがコンパイルエラーになりま...
-
Excel VBAで、ユーザーフォーム...
-
「デバイスは PRN を初期化でき...
-
ユーザー定義関数に#NAME?が返...
-
Excel VBA 『Call』で呼び出す...
-
エクセルVBAでシートモジュール...
-
VBAで別モジュールへの変数の受...
-
モジュールの最大数はいくつな...
-
VBでグローバル変数を宣言するには
-
グラフのX,Y座標を取得したい
-
VBA This Workbookモジュール...
-
モジュールとクラスの違いって...
-
【vba】フォームに書いてあ...
-
Excel VBAで、ユーザーフォー...
おすすめ情報