mysql:8175
From: "KAWAI,Takanori" <"KAWAI,Takanori" <GCD00051@xxxxxxxxxx>>
Date: Sat, 30 Aug 2003 06:17:50 +0900
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]