Archive for the 'MySQL' Category

MySQLのバルクインサート

火曜日, 7月 29th, 2008

MySQLにはバルクインサートという機能があって、
一気にデータを入れる方法があるそうです。
その際の書き方は以下のとおり。

INSERT INTO [テーブル名] ( id, created_at, updated_at ) VALUES
( ‘ ‘,now(),now() ),
( ‘ ‘,now(),now() ),
( ‘ ‘,now(),now() )
;

tagged:便利

Got a packet bigger than ‘max_allowed_packet’ bytes

月曜日, 7月 28th, 2008

INSERT文を書いたテキスト文章を
テーブルに流し込むために以下のコマンドを打ちました。

mysql -u[ユーザー名] -p[パスワード] [DB名] < master_client.sql

すると以下のエラーが出ました。

Got a packet bigger than ‘max_allowed_packet’ bytes

 
どうやらMySQLの最大利用バイト数が小さかったようです。
そこで、/etc/my.cnf を以下のように編集。

[mysqld]
・・・
max_allowed_packet=128M

 
参考にさせていただいたのは
以下のサイトです。

mysql : Got a packet bigger than 'max_allowed_packet' bytes
http://linux.ohwada.jp/modules/smartsection/item.php?itemid=402
(はっぴぃ・りなっくす)

tagged:エラー コマンド

mysql_escape_stringの罠

木曜日, 3月 27th, 2008

仕事でずいぶん前に作られたPHPをいじっていました。
DBの型も、PHPの入力チェックも通っているのに
なぜかSQLエラーが出ていたので調べてみました。
 
諸悪の根源はPHPファイルがSJISだったことであるようです。
エラーを出している部分は以下の部分でした。

$hoge = mysql_escape_string($hoge);

こうするとPHPファイル自体がSJISの場合、
$hogeに¥(円マーク)が入ってしまうケースがあり、
SQLエラーが起こっていました。
 
そこで以下に変更しました。

mysql_set_charset(’sjis’);
$hoge = mysql_real_escape_string($hoge);

mysql_real_escape_stringは
mysql_set_charsetの文字コードを見て$hogeを変換してくれるそうです。
 
ちゃんとした作りにしようと強く実感しました(苦笑)
 
tagged:エラー 文字コード

ADODBでのWHERE句 IN演算子

木曜日, 1月 31st, 2008

PHPのmysql関数で書かれているSQL文を
ADODBでの形に書き換えようと思ったときにつまづきました。
 
ADOでお馴染みの(?)prepareとexecuteを利用しようとして、
?を使ったクエリを作成しました。

$query = select * from [table] where [カラム] in ( ? ) ;

?に入るのは「1,2,3,4,5,6」という文字列。
これで実行すると・・・
沢山データがとれるはずがなぜか1つだけしかとれませんでした。
 
そこでexecuteされた結果をvar_dumpして、
実行されたSQL文を見てみると、

select * from [table] where [カラム] in ( ‘1,2,3,4,5,6′ ) ;

・・・文字列全体をクオートで囲ってしまっていました。
 
本来なら

select * from [table] where [カラム] in ( 1,2,3,4,5,6 ) ;

select * from [table] where [カラム] in ( ‘1′,’2′,’3′,’4′,’5′,’6′ ) ;

のどちらかでないといけないのですが・・・。
 
いろいろ調べましたが、結局分からずで
SQL文の中に関数を入れてしまいました。
(エスケープはもちろんしていますが・・・)
どなたかやり方をご存じの方、いらっしゃいませんか?(苦笑)
ADODBマニュアルをしっかり読めば書いてあるのだろうか・・・。

ADODBマニュアル
 
tagged:ADODB 演算子

smartyとPHPのMVC具体例

金曜日, 10月 26th, 2007

システム初心者の私は、
MVCを理解し切れていません(苦笑)
ですが、最近ちょっとわかってきたことがあります。
 
それは、文字列をクエリの中とかにあまり入れてはいけないということ。
具体的にいうと、

SELECT
IF([カラム名] , ‘○’ , ‘-’ )
FROM
[テーブル名];

といった風に、
SELECTの時点で文字列を入れているアプリがあったのですが、
これをやめてsmartyで制御したほうがよさそうです。

{if $test}○{else}-{/if}

 
ファイルの文字コードとかが絡んでくると面倒な話になります。
(文字コード変えたとたんに表示されなくなるとか。)
今までテンプレートとアプリを
どの線で区切っていけばいいかわからなかったのですが、
ひとついい勉強になりました。
 
tagged:MVC smarty 文字コード