mysql:8176
From: "山内" <"山内" <GEG03466@xxxxxxxxxx>>
Date: Sat, 30 Aug 2003 11:16:01 +0900
Subject: [mysql 08176] Re: MYSQL UPDATEで「?」を書込と「 NULL 」に化ける
川合様 質問内容で明確でなかった部分補足します。 (1)プロダクト VL ・PERL 5.005_03 ・DBI 1.14 ・DBD::mysql 2.0400 (2)実際に記述したコード use DBI; $user = '****'; $passwd = '*****'; $db2 = DBI->connect('DBI:mysql:bbs_db:localhost', $user, $passwd); $comment="?"; $sth2 = $db2->prepare("update bbs_db_tbl set comment=\"$comment\" where cnt=35"); $sth2->execute; $sth2 = $db2->prepare("select comment from bbs_db_tbl where cnt=35"); $sth2->execute; $disp_comment= $sth2->fetchrow_array; print "$disp_comment"; (3)db書き込み内容確認 上記print文での表示が 'NULL'であることを確認。 また、dos窓から下記で確認。 mysql> select comment from bbs_db_tbl where cnt=35; +---------+ | comment | +---------+ | NULL | +---------+ (4)ちなみに上記スクリプトで $comment="私は?mysqlの仕様が?理解不足?"; と変えると結果は '私はNULLmysqlの仕様がNULL理解不足NULL' となります。 ----- Original Message ----- From: "KAWAI,Takanori" <GCD00051@xxxxxxxxxx> To: <ml@xxxxxxxxxx> Sent: Saturday, August 30, 2003 6:17 AM Subject: [mysql 08175] Re: MYSQL UPDATEで「?」を書込と「 NULL」 に化ける > 川合孝典です。 > > ----- Original Message ----- > From: "SUGAWARA Hajime" <sugawara@xxxxxxxxxx> > To: <ml@xxxxxxxxxx> > Sent: Friday, August 29, 2003 10:27 AM > Subject: [mysql 08169] Re: MYSQL UPDATEで「?」を書込と「 NULL」 > に化ける > > > > 菅原です。 > > > > "山内" <GEG03466@xxxxxxxxxx>さんは書きました: > > > ■環境 mysql v1.4 for win2000,win/xp、PERL 5.0 > > > ■現象 > > > (1)PERLアプリからdb項目 commentを下記sqlでアップデート > > > update bbs_db_tbl set comment = "?" where cnt=35; > > > (半角の?です) > > > > どういうコードでUPDATEしているのか書いていただかないと原因が分かりませ > > ん。 > というのとDBI、DBD::mysqlのバージョンもわからないと。 > #Perlのバージョンもね > perl -v > perl -MDBI -e"print $DBI::VERSION" > perl -MDBD::mysql -e"print $DBD::mysql::VERSION" > とすればわかるはず。 > > > > Perl+DBIを使っていて、 > > > > my $sth = $dbh->prepare( q{ > > UPDATE bbs_db_tbl SET comment="?" WHERE cnt=35 > > }); > > $sth->execute(); > > > > のように書いているのであれば、「?」はプレースホルダとして扱われます。 > そんなことはありません。"(ダブルクォート)で囲まれていますから、 > 文字列と判定するべきでしょう。DBD::mysqlならそうでないと困ります。 > もちろん > UPDATE bbs_db_tbl SET comment=? WHERE cnt=35 > のようにクォートされていなければ、プレースホルダになります。 > > ちなみに私の環境 > -WinXP HomeEdition > -ActivePerl Build633 + DBI : 1.28 + DBD::mysql : 2.1024 > -MySQL 3.23.52-max-nt > では、何も問題ありませんでした。 > 実際のコードはどうなっているのでしょうか? > > [確認したスクリプト] > use strict; > use DBI; > my $hDb = DBI->connect('dbi:mysql:test', '', '', > {RaiseError=>1, AutoCommit=>1}); > > #1. DROP TABLE > eval {$hDb->do('DROP TABLE bbs_db_tbl');}; > #2. CREATE TABLE > # 2.1 CREATE TABLE > $hDb->do(q{ > CREATE TABLE bbs_db_tbl ( > cnt integer, > comment varchar(80) > ) > } > ); > my $hSt = $hDb->prepare( > 'INSERT INTO bbs_db_tbl VALUES(?, ?)'); > $hSt->execute(34, 'ABC1'); > $hSt->execute(35, 'ABC2'); > $hSt->execute(36, 'ABC3'); > $hSt->execute(37, 'ABC3'); > $hDb->do( > 'update bbs_db_tbl set comment = "?" where cnt=35'); > my $hStU = $hDb->prepare( > 'update bbs_db_tbl set comment = "?" where cnt=36'); > $hStU->execute(); > # NULLになる > $hStU = $hDb->prepare( > 'update bbs_db_tbl set comment = ? where cnt=37'); > $hStU->execute(); > > [mysqlによる表示] > mysql> select * from bbs_db_tbl; > +------+---------+ > | cnt | comment | > +------+---------+ > | 34 | ABC1 | > | 35 | ? | > | 36 | ? | > | 37 | NULL | > +------+---------+ > 4 rows in set (0.00 sec) > > =================================================== > 川合 孝典 (Hippo2000) > DBI日本語メーリングリスト管理人、Kansai.pm所属 > kwitknr@xxxxxxxxxx GCD00051@xxxxxxxxxx > http://member.nifty.ne.jp/hippo2000、http://www.hippo2000.info/ > perldocの日本語情報ならperldocjp:翻訳してみませんか? > http://perldocjp.sourceforge.jp/ > =================================================== > >
8165 2003-08-28 23:46 ["山内" <GEG03466@xxx] MYSQL UPDATEで「?」を書込と「 NULL 」に化ける 8167 2003-08-29 09:10 ┣[きたぢま <kitajima@x] 8168 2003-08-29 09:32 ┣[Shinichi Maruyama <m] 8169 2003-08-29 10:27 ┣[SUGAWARA Hajime <sug] 8175 2003-08-30 06:17 ┃┗["KAWAI,Takanori" <GC] -> 8176 2003-08-30 11:16 ┃ ┣["山内" <GEG03466@xxx] 8177 2003-08-30 21:58 ┃ ┃┗["KAWAI,Takanori" <GC] 8181 2003-09-01 12:19 ┃ ┗[SUGAWARA Hajime <sug] 8174 2003-08-30 00:59 ┗["山内" <GEG03466@xxx]