2008-12-28
■[MySQL][PHP][Ruby][せきゅりてぃ]SET NAMES のいらないせいかつ
PHPとRubyのMySQLくらいあんとらいぶらりをきよしくただしくつかうほうほう*1をまとめてみた。Shift_JISがきてもU+00A5がきてもだいじょうぶなはず。
よごれたぶぶんをみつけたかたはぜひごしてきを!
Version
PHP
mysql
$link = mysql_connect('localhost', 'user', 'password');
mysql_select_db('test', $link);
mysql_set_charset('utf8', $link);
$result = mysql_query(
sprintf("SELECT id FROM tb WHERE name = '%s'",
mysql_real_escape_string('あいうえお'))
);
if ($result) {
while ($row = mysql_fetch_assoc($result)) {
printf("%d\n", $row['id']);
}
mysql_free_result($result);
}
mysql_close($link);
mysqli
OOP:
$mysqli = new mysqli('localhost', 'user', 'password', 'test');
$mysqli->set_charset('utf8');
$stmt = $mysqli->prepare("SELECT id FROM tb WHERE name = ?");
$name = 'あいうえお';
$stmt->bind_param('s', $name);
$stmt->bind_result($id);
$stmt->execute();
while ($stmt->fetch()) {
printf("%d\n", $id);
}
$stmt->close();
$mysqli->close();
てつづきがた:
$link = mysqli_connect('localhost', 'user', 'password', 'test');
mysqli_set_charset($link, 'utf8');
$stmt = mysqli_prepare($link, "SELECT id FROM tb WHERE name = ?");
$name = 'あいうえお';
mysqli_stmt_bind_param($stmt, 's', $name);
mysqli_stmt_bind_result($stmt, $id);
mysqli_stmt_execute($stmt);
while (mysqli_stmt_fetch($stmt)) {
printf("%d\n", $id);
}
mysqli_stmt_close($stmt);
mysqli_close($link);
ひprepared statements:
$mysqli = new mysqli('localhost', 'user', 'password', 'test');
$mysqli->set_charset('utf8');
$result = $mysqli->query(
sprintf("SELECT id FROM tb WHERE name = '%s'",
$mysqli->real_escape_string('あいうえお'))
);
if ($result) {
while ($row = $result->fetch_assoc()) {
printf("%d\n", $row['id']);
}
$result->close();
}
$mysqli->close();
PDO_MYSQL
$dbh = new PDO('mysql:host=localhost;dbname=test', 'user', 'password', array( PDO::MYSQL_ATTR_READ_DEFAULT_FILE => '/etc/my.cnf', PDO::MYSQL_ATTR_READ_DEFAULT_GROUP => 'pdo', PDO::MYSQL_ATTR_DIRECT_QUERY => false /* server-side prepared statements */ )); $stmt = $dbh->prepare("SELECT id FROM tb WHERE name = ?"); $stmt->bindValue(1, 'あいうえお', PDO::PARAM_STR); $stmt->execute(); while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { printf("%d\n", $row['id']); }
ひprepared statements:
$dbh = new PDO('mysql:host=localhost;dbname=test', 'user', 'password', array( PDO::MYSQL_ATTR_READ_DEFAULT_FILE => '/etc/my.cnf', PDO::MYSQL_ATTR_READ_DEFAULT_GROUP => 'pdo', PDO::MYSQL_ATTR_DIRECT_QUERY => true )); $result = $dbh->query(sprintf("SELECT id FROM tb WHERE name = %s", $dbh->quote('あいうえお', PDO::PARAM_STR) )); while ($row = $result->fetch(PDO::FETCH_ASSOC)) { printf("%d\n", $row['id']); }
/etc/my.cnf
[pdo] default-character-set = utf8
Ruby
MySQL/Ruby
my = Mysql.init my.options(Mysql::SET_CHARSET_NAME, "utf8") my.connect("localhost", "user", "password", "test") st = my.prepare("SELECT id FROM tb WHERE name = ?") st.execute("あいうえお") st.each do |x| p x[0] end st.close my.close
ひprepared statements:
my = Mysql.init my.options(Mysql::SET_CHARSET_NAME, "utf8") my.connect("localhost", "user", "password", "test") my.query(sprintf("SELECT id FROM tb WHERE name = '%s'", my.quote("あいうえお"))).each do |x| p x[0] end my.close
*1:ついSQLいんじぇくしょんないみで
2008-11-17
■[せきゅりてぃ]Webさいとがぱすわーどをかぎゃくじょうたいでほぞんしているかをみわける10のぽいんと
- ひみつのしつもんにこたえるとぱすわーどがひょうじされる
- ぱすわーどをわすれたときのふぉーむにめーるあどれすをにゅうりょくするとぱすわーどがかかれためーるがおくられてくる
- ゆーざーさぽーとにでんわするとぱすわーどをよみあげてくれる
- ゆーざーさぽーとにめーるするとぱすわーどがかかれためーるがかえってくる
- ぱすわーどが4けたのすうじしばり
- ぱすわーどのおおもじこもじがなぜかくべつされていない*1
- ぱすわーどのさいだいちょうがみょうにみじかく8もじとかになっている
- さいだいちょうをこえたぱすわーどもうけいれてしまうがろぐいんでつかえるのはさいだいちょうにきりづめたぱすわーど*2
-
ぱすわーどはあんごうかしてほかんします
とかいてあるぷらいばしーぽりしーがこぴぺ
2008-10-13
■Subversion 1.5へのいこう
Subversionの1.5よりまえのばーじょんでは、ないぶではりびじょんごとにどういつでぃれくとりにふぁいるがさくせいされるため、りびじょんかずがおおきくなるとかなりふあんなじょうたいになってしまう。*1
しかし、ばーじょん1.5からはshardingというしくみがどうにゅうされ、1000りびじょんごとにいちかいそうふかいでぃれくとりにふぁいるがつくられるようになったのでおおいにちもあんしん。
Improved support for large deployments on FSFS, via sharding
1.5ではほかにもあたらしいきのうがいくつかついかされており、とくにまーじかんれんのきのうついか(Merge tracking)がうれしいのでばーじょんあっぷしたいのだが、ふるいばーじょんのくらいあんとがこんざいしたばあいにどうなるかがふあんなのでしらべてみた。
けんしょうにしようしたのはいかのばーじょん。
$ svn --version svn, ばーじょん 1.5.3 (r33570) こんぱいるにちじ: Oct 11 2008, 19:03:46
$ svn --version svn, ばーじょん 1.4.2 (r22196) こんぱいるにちじ: Mar 14 2007, 20:55:55
それぞれMacPortsとCentOS 5.2でのさいしんぱっけーじ。
Merge trackingをためしてみよう
きゅうばーじょんでのけんしょうのまえに、とりあえずしんきのうのMerge trackingをためしてみよう。
さんぷるとして svn://svn-server/trunk に rails のぷろじぇくとをつくってみた。
ぶらんちさくせい
[~] $ svn copy svn://svn-server/trunk svn://svn-server/branches/first-test
trunkのさぎょうこぴーでてきとうなこんとろーらをさくせい
[~/trunk] $ ./script/generate controller -c login [~/trunk] $ svn ci
first-testのさぎょうこぴーでてきとうなこんとろーらをさくせい
[~/first-test] $ ./script/generate controller -c profile [~/first-test] $ svn ci
first-testのさぎょうこぴーにtrunkをまーじ
[~/first-test] $ svn merge svn://svn-server/trunk --- r2 から r4 までを '.' にまーじしています: A test/functional/login_controller_test.rb A app/helpers/login_helper.rb A app/controllers/login_controller.rb A app/views/login
おぉ!
さらにtrunkのさぎょうこぴーでてきとうなこんとろーらをさくせい
[~/trunk] $ ./script/generate controller -c message [~/trunk] $ svn ci
もういちどfirst-testのさぎょうこぴーにtrunkをまーじ
[~/first-test] $ svn merge svn://svn-server/trunk --- r5 から r6 までを '.' にまーじしています: A test/functional/message_controller_test.rb A app/helpers/message_helper.rb A app/controllers/message_controller.rb A app/views/message
おおぉ!
しゅどうでりびじょんをしていしたりきろくしたりするひつようがないぞ!
まーじしたりびじょんはsvn:mergeinfoぷろぱてぃにきろくされていた
[~/first-test] $ svn propget svn:mergeinfo /trunk:2-6
さいごにfirst-testぶらんちからtrunkへのまーじ
$ svn merge --reintegrate svn://svn-server/branches/first-test --- りぽじとり URL まのさぶんを '.' にまーじしています: A test/functional/profile_controller_test.rb A app/helpers/profile_helper.rb A app/controllers/profile_controller.rb A app/views/profile U .
やったー
ただし、ぶらんちをさくせいしてからtrunkにまーじするまでのまにどちらかででぃれくとりのいどう(なまえへんこう)またはこぴーがおこなわれていると、さいごのまーじでしっぱいしてしまう。
[~/trunk] $ svn merge --reintegrate svn://svn-server/branches/first-test svn: Cannot reintegrate from 'svn://svn-server/branches/first-test' yet: Some revisions have been merged under it that have not been merged into the reintegration target; merge them first, then retry.
そのばあいはいぜんとおなじほうほうでまーじをおこなえばもんだいない
[~/trunk] $ svn merge svn://svn-server/trunk@11 svn://svn-server/branches/first-test@11 .
ふるいばーじょんでのまーじ
ぶらんちさくせい
[1.5:~] $ svn copy svn://svn-server/trunk svn://svn-server/branches/second-test
trunkのさぎょうこぴーでてきとうなこんとろーらをさくせい
[1.5:~/trunk] $ ./script/generate controller -c star [1.5:~/trunk] $ svn ci
second-testのさぎょうこぴーでてきとうなこんとろーらをさくせい
[1.5:~/second-test] $ ./script/generate controller -c bookmark [1.5:~/second-test] $ svn ci
1.4くらいあんとでsecond-testのさぎょうこぴーにtrunkをまーじ
[1.4:~/second-test] $ svn merge -r 17:19 svn://svn-server/trunk A test/functional/star_controller_test.rb A app/helpers/star_helper.rb A app/controllers/star_controller.rb A app/views/star
trunkのさぎょうこぴーへさらにてきとうなこんとろーらをついか
[1.5:~/trunk] $ ./script/generate controller -c anond [1.5:~/trunk] $ svn ci
1.5くらいあんとでsecond-testのさぎょうこぴーにtrunkをまーじ
[1.5:~/second-test] $ svn merge svn://localhost/trunk --- r17 から r21 までを '.' にまーじしています: A test/functional/anond_controller_test.rb A test/functional/star_controller_test.rb A app/helpers/star_helper.rb A app/helpers/anond_helper.rb A app/controllers/anond_controller.rb A app/controllers/star_controller.rb A app/views/star A app/views/anond
ちょうふくしてまーじがおこなわれてしまった。ふぁいるにいっさいへんこうがなければよきにはからってくれるみたいだけど、なんらかのへんこうがあると
--- r17 から r22 までを '.' にまーじしています:
A test/functional/anond_controller_test.rb
A test/functional/star_controller_test.rb
A app/helpers/star_helper.rb
A app/helpers/anond_helper.rb
A app/controllers/anond_controller.rb
'app/controllers/star_controller.rb' できょうごうがみつかりました。
せんたく: えんき (p), ぜんさぶん (df), へんしゅう (e),
へるぷでそのほかのおぷしょんをひょうじ (h) : p
C app/controllers/star_controller.rb
'app/views/star' をとばしました
A app/views/anond
しょうとつする。
まーじさぎょうをふるいくらいあんととまじりながらおこなうことはこうりょされていないようだ。
まとめ
- Merge trackingはべんり
- ぶらんちつくるならくらいあんとも1.5にしたほうがよい
- 1.4いぜんでまーじをするとふこうになる
*1:FSFSのばあい
2008-08-24
■[せきゅりてぃ]AutoRun
てもとでかくにんしたものでは、
- いんたーねっとうえからうぃるすのほんたいをだうんろーど(AutoRunでじっこうされるのはだうんろーだ)
- ほんたいをじっこう
- (たぶん)ほんたいが
- かくどらいぶにAutoRunのせっていをする
- さくせいするふぁいるはよみとりせんようかくしふぁいるのしすてむぞくせい
- かくしふぁいるをひょうじしないようにれじすとりのせっていをへんこう
- うぃるすとしてのほんらいのどうさをおこなう(きーろがー?)
こういったことをいっているらしい。
つくられる autorun.inf ふぁいるのなかみはこんなかんじ。
じっさいはところどころにあんちうぃるすさけとおもわれるらんだむなもじれつがふくまれてた。
[Autorun] open=virus.com ;shell\open=Open(&0) shell\open\Command=virus.com shell\open\Default=1 ;shell\explore=Manager(&X) shell\explore\Command=virus.com
Windows XPのばあい、このじょうたいではどらいぶあいこんをだぶるくりっくしても、こんてきすとめにゅーからひらこうとしてもうぃるすがじっこうされてしまうので、あんぜんにどらいぶをひらくには、どらいぶにんしきときのだいあろぐでふぉるだをひらいてふぁいるをひょうじするをえらぶか、えくすぷろーらのふぉるだつりーからどらいぶをせんたくするかしないといけない*1。
そんなかわったそうさをかんぺきにおこなうのはたいへんなので、れじすとりでAutoRunをむこうにしてしまったほうがよいとおもう。
あしゅだらけであんちうぃるすそふともあまりやくにたたないようなので。
*1:こまんどらいんとかほかのほうほうもある
2008-04-29
■[にちじょうせいかつ][Mac]Time MachineでVMwareのかそうましんがばっくあっぷされるようになった
Time Capsuleをかったで、VMwareのかそうましんはTime Machineでばっくあっぷされないようだとかいたのだけど、なんかさいきんばっくあっぷのてんそうさいずがおおきいなとおもったらばっくあっぷされてた。
VWware Fusionのあっぷでーと(1.1.1→1.1.2)をしたから?
おきばしょがなかったあっぷでーたのでぃすくいめーじをかそうましんふぉるだにおいたから?
ともあれかそうましんをきどうするどにばっくあっぷがかずGBたんいでおこなわれるので、うれしいようなかなしいような。
あと、かんけいないけどせんじつそうさみすしてHDL-F300のでーたをとばした。