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]