[前][次][番号順一覧][スレッド一覧]

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/hippo2000http://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]