約 182,137 件
https://w.atwiki.jp/ce00582/pages/2229.html
?php require("calldata.php"); $sql = "SELECT * FROM data20"; $result = mysql_query($sql, $link); $n=1; while( $row = mysql_fetch_row( $result ) ){ $matrix[$n][1] = $row[0]; $matrix[$n][2] =$row[1]; $matrix[$n][3] =$row[2]; $n=$n+1; } $maxn=$n; for ($n=1; $n $maxn; $n++) { $age =$matrix[$n][1]; $car =$matrix[$n][2]; $mint[$age][$car] = $matrix[$n][3]; } for ($age = 15;$age 70;$age++){ for ($car = 1;$car 51;$car++){ $mint[$age][$car]=$mint[$age][$car]/10000; } } $sql = "truncate eli20"; $exe= mysql_query($sql,$link); for ($age = 15;$age 70;$age++){ for ($car = 1;$car 51;$car++){ $x=$mint[$age][$car]; $sql = "insert into eli20 values($age,$car,$x)"; $exe= mysql_query($sql,$link); } } $close_flag = mysql_close($link); print("20 女子被保険者 計算終了"); ?
https://w.atwiki.jp/tak_is/pages/62.html
2013-02-12 14 15 36 (Tue); 2008との比較と、2012の概要説明。 SQLServer2012のEdition(2008との相違点) SQLServer2008 SQLServer2012 SQLServer2008 R2 Datacenter なし SQLServer2008 R2 Enterprise SQLServer2012 Enterprise なし SQLServer2012 Business Intelligence SQLServer2008 R2 Standard Edition SQLServer2012 Standard Edition SQLServer2008 R2 Workgroup なし SQLServer2008 R2 Web なし SQLServer2012のライセンス ライセンス種類 概要 コアベースモデル Enterprise/Standardで提供。コアライセンス。クライアント接続数に依存されない。 サーバー/CALモデル Business Intelligence/Standardで提供。接続する端末数のライセンスが必要。 【コアベースモデル】 ・サーバーのコア数分のライセンスが必要。 物理OSは全コア数、仮想OSは、割り当てたコア数分。 最少は4コアで、2コアずつ増やせる ※注意が必要なのは、1物理CPU毎に最少4コア必要ということ。 ⇒2コアCPUを2本搭載しているサーバーの場合は、8コアライセンス必要 6コアCPUを2本搭載しているサーバーの場合は、12コアライセンス必要 【サーバー/CALモデル】 ・物理/仮想OS環境ごとに、まず1サーバーライセンス必要 ・あとは、接続端末台数分のCALが必要 ※C/Sシステムなどで、接続端末5台と決まっている場合は、 1サーバーライセンス + 5デバイスCAL 必要
https://w.atwiki.jp/ce00582/pages/2245.html
?php require("calldata.php"); $sql = "SELECT * FROM eli06"; $result = mysql_query($sql, $link); $n=1; while( $row = mysql_fetch_row( $result ) ){ $matrix[$n][1] = $row[0]; $matrix[$n][2] =$row[1]; $matrix[$n][3] =$row[2]; $matrix[$n][4] =$row[3]; $matrix[$n][5] =$row[4]; $n=$n+1; } $maxn=$n; for ($n=1; $n $maxn; $n++) { $year =$matrix[$n][1]; $age =$matrix[$n][2]; $mrou[$year][$age] = $matrix[$n][3]; $wrou[$year][$age] = $matrix[$n][4]; $drou[$year][$age] = $matrix[$n][5]; } $sql = "SELECT * FROM eli69"; $result = mysql_query($sql, $link); $n=1; while( $row = mysql_fetch_row( $result ) ){ $matrix[$n][1] = $row[0]; $matrix[$n][2] =$row[1]; $matrix[$n][3] =$row[2]; $matrix[$n][4] =$row[3]; $matrix[$n][5] =$row[4]; $n=$n+1; } $maxn=$n; for ($n=1; $n $maxn; $n++) { $year =$matrix[$n][1]; $age =$matrix[$n][2]; $mr[$year][$age] = $matrix[$n][3]; $wr[$year][$age] = $matrix[$n][4]; $dr[$year][$age] = $matrix[$n][5]; } for ($year=8;$year 100;$year++){ for ($age=15;$age 70;$age++){ $ms[$year][$age]=$mr[$year][$age]*$mrou[$year][$age]; $ws[$year][$age]=$wr[$year][$age]*$wrou[$year][$age]; $ds[$year][$age]=$dr[$year][$age]*$drou[$year][$age]; } } $sql = "truncate eli71"; $exe= mysql_query($sql,$link); for ($year=8;$year 100;$year++){ for ($age=15;$age 70;$age++){ $x=$ms[$year][$age]; $y=$ws[$year][$age]; $z=$ds[$year][$age]; $sql = "insert into eli71 values($year,$age,$x,$y,$z)"; $exe= mysql_query($sql,$link); } } $close_flag = mysql_close($link); print("71 就業者 計算終了"); ?
https://w.atwiki.jp/m_shige1979/pages/617.html
MySQL起動関連 コマンドラインより起動 C \ "C \Program Files\MySQL\MySQL Server 5.1\bin\mysqld" --defaults-file="C \Program Files\MySQL\MySQL Server 5.1\my.ini" --console 100630 12 31 20 [Note] Plugin FEDERATED is disabled. 100630 12 31 23 InnoDB Started; log sequence number 0 460768860 100630 12 31 25 [Note] Event Scheduler Loaded 0 events 100630 12 31 25 [Note] C \Program Files\MySQL\MySQL Server 5.1\bin\mysqld ready for connections. Version 5.1.47-community socket port 3306 MySQL Community Server (GPL) コマンドラインより終了 C \ "C \Program Files\MySQL\MySQL Server 5.1\bin\mysqladmin" -u root --password=root123 --port=3306 shutdown C \ サービス登録 C \ "C \Program Files\MySQL\MySQL Server 5.1\bin\mysqld" --install MySQL5 --defaults-file="C \Program Files\MySQL\MySQL Server 5.1\my.ini" Service successfully installed. C \ サービス解除 C \ "C \Program Files\MySQL\MySQL Server 5.1\bin\mysqld" --remove MySQL5 Service successfully removed. C \ 複数起動設定 ポート番号、データディレクトリ、my.iniファイル編集などを行い、設定ファイルを変更 上記の方法を行い、複数起動 サンプルはここを参照
https://w.atwiki.jp/wiki2_chobi/pages/16.html
データベースの作成手順 環境変数の設定 初期化パラメータファイルの作成 CONNECT / AS SYSDBA CREATE SPFILE FROM PFILE; インスタンスの起動 CONNECT / AS SYSDBA STARTUP NOMOUNT データベースの作成 CREATE DATABASE [データベース名] CREATE DATABASE文で指定できるもの REDOログファイル名、サイズ REDOログファイル最大グループ数 REDOログメンバ最大数 アーカイブREDOログファイルの最大数 データファイル最大数 インスタンス最大数 アーカイブログモード キャラクタセット ナショナルキャラクタセット SYSYTEM表領域データファイル名、サイズ、自動拡張、最大サイズ、 デフォルト一時表領域名、データファイル名、サイズ、エクステント管理 UNDO表領域名、データファイル名、サイズ、自動拡張、最大サイズ タイムゾーン sql.bsqスクリプトによって管理者ユーザSYSとSYSTEM、SYSTEMロールバックセグメント、データディクショナリ表が作成される データディクショナリビューの作成 SYSユーザでcatalog.sqlを実行し、データディクショナリ表に対するビュー、動的パフォーマンスビューに対するビュー、これらのビューのシノニムを作成する SYSユーザでcatproc.sqlを実行し、PL/SQLの環境を構築する SQL*Plusを使用する場合、SYSTEMユーザでSQL*Plusの製品情報を作成するpupbld.sqlを実行する OMF (Oracle-Managed Files) DB_CREATE_FILE_DEST デーファイルのデフォルトの作成ディレクトリ DB_CREATE_ONLINE_LOG_DEST_n REDOログファイルと制御ファイルのデフォルトの場所(最大5つまで) ALTER SYSTEM SETコマンドで動的変更可能 両方指定することも、一方のみ使用することも可能
https://w.atwiki.jp/ce00582/pages/2224.html
?php require("calldata.php"); $sql = "SELECT * FROM eli08"; $result = mysql_query($sql, $link); $n=1; while( $row = mysql_fetch_row( $result ) ){ $matrix[$n][1] = $row[0]; $matrix[$n][2] = $row[1]; $matrix[$n][3] = $row[2]; $matrix[$n][4] = $row[3]; $n=$n+1; } $maxn=$n; for ($n=1;$n $maxn;$n++){ $year= $matrix[$n][1]; $age= $matrix[$n][2]; $mh[$year][$age]= $matrix[$n][3]; $fh[$year][$age]= $matrix[$n][4]; } $sql = "SELECT * FROM eli09"; $result = mysql_query($sql, $link); $n=1; while( $row = mysql_fetch_row( $result ) ){ $matrix[$n][1] = $row[0]; $matrix[$n][2] = $row[1]; $matrix[$n][3] = $row[2]; $matrix[$n][4] = $row[3]; $n=$n+1; } $maxn=$n; for ($n=1;$n $maxn;$n++){ $year= $matrix[$n][1]; $age= $matrix[$n][2]; $m4[$year][$age]= $matrix[$n][3]; $f4[$year][$age]= $matrix[$n][4]; } for ($year=8;$year 100;$year++){ for ($age=15;$age 70;$age++){ $m2[$year][$age]=$mh[$year][$age]-$m4[$year][$age]; $f2[$year][$age]=$fh[$year][$age]-$f4[$year][$age]; } } $sql = "truncate eli10"; $exe= mysql_query($sql,$link); for ($year=8;$year 100;$year++){ for ($age=15;$age 70;$age++){ $x=$m2[$year][$age]; $y=$f2[$year][$age]; $sql = "insert into eli10 values($year,$age,$x,$y)"; $exe= mysql_query($sql,$link); } } $close_flag = mysql_close($link); print("10 厚生年金被保険者 計算終了"); ?
https://w.atwiki.jp/ochamemo/pages/35.html
オチャメモ テーブルを使う [#q85bf1cc] テーブル一覧 [#u35490bd] カラム一覧 [#kc4924e1] ユーザの作成 テーブルを使う use db テーブル名 テーブル一覧 show tables; カラム一覧 show ユーザの作成 id user, ps passwdの作成 mysql grant select, insert, delete, update, create, drop, file, aluter, index on *.* to miki identified by passwd ;
https://w.atwiki.jp/kimikage/pages/136.html
データをエクスポート 基本的な使い方は以下の通り タブ区切りでテーブルのレコードがすべて出力されます。 bcp [DB名].dbo.[テーブル名] out "[出力先ファイル名]" -S [インスタンス名] -U [ユーザID] -P [パスワード] 例) SET dbName=TestDB SET tableName=TestTable SET filePath=%~dp0TestFile.csv SET instanceName=TestInstance SET userId=sa SET password=Password bcp %dbName%.dbo.%tableName% out "%filePath%" -S %instanceName% -U %userId% -P %password% PAUSE queryoutを使用すればクエリの実行結果をファイルに出力できます。 SQLを複数行記載する場合は以下の点に注意します。 「^」で「"」や「()」をエスケープ 「^」で複数行を結合 「%」で「%」をエスケープ 例) SET dbName=TestDB SET tableName=TestTable SET filePath=%~dp0TestFile.csv SET instanceName=TestInstance SET userId=sa SET password=Password bcp ^"^ USE %dbName%^ DECLARE @TableName NVARCHAR^(50^)^ SET @TableName= %tableName% ^ DECLARE @TmpTbl TABLE^(^ ColumnName NVARCHAR^(50^)^)^ INSERT INTO @TmpTbl^ SELECT col.name^ FROM sys.columns AS col^ LEFT OUTER JOIN sys.objects AS obj^ ON col.object_id = obj.object_id^ WHERE ^(obj.type = U ^)^ AND ^(obj.name = @TableName^)^ AND col.name NOT LIKE %%Time ^ ORDER BY col.name^ DECLARE @ColumnName NVARCHAR^(50^)^ DECLARE @SQL NVARCHAR^(MAX^)^ SET @SQL = ^ WHILE EXISTS ^(SELECT * FROM @TmpTbl^) BEGIN ^ SELECT TOP 1 @ColumnName = ColumnName^ FROM @TmpTbl^ ORDER BY ColumnName^ DELETE FROM @TmpTbl^ WHERE ColumnName = @ColumnName^ SET @SQL = @SQL + @ColumnName^ IF EXISTS ^(SELECT * FROM @TmpTbl^) BEGIN^ SET @SQL = @SQL + , ^ END^ END^ SET @SQL = SELECT + @SQL + FROM + @TableName + ORDER BY + @SQL^ EXECUTE^(@SQL^)^"^ queryout "%filePath%" -S %instanceName% -U %userId% -P %password% データをインポート bcp [DB名].dbo.[テーブル名] in "[読み込み元ファイル名]" -S [インスタンス名] -U [ユーザID] -P [パスワード] 例) SET dbName=TestDB SET tableName=TestTable SET filePath=%~dp0TestFile.csv SET instanceName=TestInstance SET userId=sa SET password=Password IF EXIST "%filePath%" ( sqlcmd -Q "DELETE FROM %dbName%.dbo.%tableName%" -S %instanceName% -U %userId% -P %password% bcp %dbName%.dbo.%tableName% in "%filePath%" -S %instanceName% -U %userId% -P %password% )
https://w.atwiki.jp/chacha/pages/62.html
sql文以外は一行ずついれたほうがいいかも エラーとかがあったらサブリーダーまで cd c \mysql\bin mysql -u root select host,user,password from mysql.user; ←やってもやらんでも、どっちでも可 set password for root@localhost=PASSWORD( root ); set password for root@build=PASSWORD( root ); exit; mysql -u root -p次回からrootで入るにはここと次の行の2つを入力する必要がある root create database noblog; use noblog; CREATE TABLE user ( userID VARCHAR(20) primary key, passwd VARCHAR(16) not null, mail VARCHAR(100)not null, himitu int(1), answer varchar(30), ninsyouKey VARCHAR(8), kariDay date ); create table profile ( userID varchar(20), name varchar(40), year varchar(4), month varchar(2), day varchar(2), job varchar(2), sex int(1), hobby varchar(200), hitokoto varchar(200), pic varchar(2), nameSecret int(1), barthSecret int(1), primary key(userID) ); create table job ( jobNo integer(2) auto_increment, jobName varchar(20), primary key (jobNo) ); create table categori ( categoriNo int(5) primary key, categoriName varchar(40) ); create table theme ( userID varchar(20), themeNo int(2), themeName varchar(40) ); create table kiji ( userID varchar(20), kijiNo int(5), themeNo int(2), kijiTitle varchar(100), text text, commentFlg int(1), trackflg int(1), writeDay date, writeTime time ); create table comment ( userid varchar(20), kijiNo int(5), commentNo int(3), commWriter varchar(100), commDate datetime ); create table blog ( userID varchar(20) primary key, bTitle varchar(100) not null, bSetumei varchar(200), cssNo int(3), categoriNo int(5), categoriRunk int(6), allRank int(7), commentFlg int(1), trackFlg int(1) ); create table trackback ( kijiNo int(5), trackNo int(3), trackTitle varchar(100), bTitle varchar(100), bUul varchar(100), trackText varchar(200), trackDate datetime ); create table ranking ( userID varchar(20) primary key, one int(5), two int(5), three int(5), four int(5), five int(5), six int(5), seven int(5), weekTotal int(7), allTotal int(8) ); create table design ( desNo int(2) primary key auto_increment, css text ); create table picture ( userID varchar(20) primary key, picNo int(2), pic longblob, thumbnail varchar(50) ); INSERT INTO categori ( categoriNo , categoriName ) VALUES ( 1001 , ダイエット ); INSERT INTO categori ( categoriNo , categoriName ) VALUES ( 1002, 健康法 ); INSERT INTO categori ( categoriNo , categoriName ) VALUES ( 1003, 美容・コスメ ); INSERT INTO categori ( categoriNo , categoriName ) VALUES ( 1004, 出産・育児 ); INSERT INTO categori ( categoriNo , categoriName ) VALUES ( 1005, 仕事 ); INSERT INTO categori ( categoriNo , categoriName ) VALUES ( 1006, 恋愛 ); INSERT INTO categori ( categoriNo , categoriName ) VALUES ( 1007, 就職活動 ); INSERT INTO categori ( categoriNo , categoriName ) VALUES ( 1008, その他 ); INSERT INTO categori ( categoriNo , categoriName ) VALUES ( 2001, 社会 ); INSERT INTO categori ( categoriNo , categoriName ) VALUES ( 2002, 政治 ); INSERT INTO categori ( categoriNo , categoriName ) VALUES ( 2003, 芸能 ); INSERT INTO categori ( categoriNo , categoriName ) VALUES ( 2004, その他 ); INSERT INTO categori ( categoriNo , categoriName ) VALUES ( 3001, 野球 ); INSERT INTO categori ( categoriNo , categoriName ) VALUES ( 3002, サッカー ); INSERT INTO categori ( categoriNo , categoriName ) VALUES ( 3003, その他 ); INSERT INTO categori ( categoriNo , categoriName ) VALUES ( 4001, パチンコ・スロット ); INSERT INTO categori ( categoriNo , categoriName ) VALUES ( 4002, 競馬 ); INSERT INTO categori ( categoriNo , categoriName ) VALUES ( 4003, その他 ); INSERT INTO categori ( categoriNo , categoriName ) VALUES ( 5001, 本・雑誌 ); INSERT INTO categori ( categoriNo , categoriName ) VALUES ( 5002, 音楽 ); INSERT INTO categori ( categoriNo , categoriName ) VALUES ( 5003, 料理 ); INSERT INTO categori ( categoriNo , categoriName ) VALUES ( 5004, グルメ ); INSERT INTO categori ( categoriNo , categoriName ) VALUES ( 5005, 旅行 ); INSERT INTO categori ( categoriNo , categoriName ) VALUES ( 5006, 小説・詩 ); INSERT INTO categori ( categoriNo , categoriName ) VALUES ( 5007, 車・バイク ) ; INSERT INTO categori ( categoriNo , categoriName ) VALUES ( 5008, ショッピング ); INSERT INTO categori ( categoriNo , categoriName ) VALUES ( 5009, ゲーム ); INSERT INTO categori ( categoriNo , categoriName ) VALUES ( 5010, ペット ); INSERT INTO categori ( categoriNo , categoriName ) VALUES ( 5011, コレクション ); INSERT INTO categori ( categoriNo , categoriName ) VALUES ( 5012, ファッション ); INSERT INTO categori ( categoriNo , categoriName ) VALUES ( 5013, おもちゃ ); INSERT INTO categori ( categoriNo , categoriName ) VALUES ( 5014, その他 ); INSERT INTO categori ( categoriNo , categoriName ) VALUES ( 6001, 俳優・タレント・アイドル ); INSERT INTO categori ( categoriNo , categoriName ) VALUES ( 6002, 漫画・アニメ ); INSERT INTO categori ( categoriNo , categoriName ) VALUES ( 6003, お笑い ); INSERT INTO categori ( categoriNo , categoriName ) VALUES ( 6004, バラエティ ); INSERT INTO categori ( categoriNo , categoriName ) VALUES ( 6005, 映画 ); INSERT INTO categori ( categoriNo , categoriName ) VALUES ( 6006, ドラマ ); INSERT INTO categori ( categoriNo , categoriName ) VALUES ( 6007, テレビ ); INSERT INTO categori ( categoriNo , categoriName ) VALUES ( 6008, その他 );
https://w.atwiki.jp/irukakiss/pages/64.html
SQLiteを使う(メモ) 2011年9月9日。ショック。アミーゴデータベースで店のホームページを作っているが、カクテルメニューは良しとしても、ドリンクメニューやフードメニューの場合に著作権表示がうざい。これだ!ライセンス取得にいくらかかるか問い合わせたら、4万円だった。あと一歩で完成だったがあきらめる。4万円払うなら、SQLiteを1からやる。アミーゴにはお世話になったが、さよならの方向しかない。 今この時点で、SQLiteに対する知識は限りなくゼロに近い。MySQLより使いやすそうだとか、ライセンスの問題は全くないとか、PHP5に付属しているから使わにゃ損とかそんな程度。だいたい、データベース言語そのものを全く知らない。何せ、アミーゴデータベースはそうした知識なしにcgiでデータベースシステムの大枠ができていて、作るというよりはサンプルの改造をするような形でやればわかってなくてもできてしまうというのがその特徴だったし。データベースについては、四半世紀も昔の頃、MSDOSの時代、d-BaseⅢというRDBのはしりみたいなソフトを使ったことがあるが、そんなの忘れたし、今となっては化石みたいなもんだろう。ああ、完成寸前だったのに、また暗中模索が始まる。 アミーゴを使えるようになるのもある程度苦労したが、やっと使えるようになっておさらばするのも本当につらいが、4万円なんて言われたらどうしようもない。払えない。確かにそれだけの価値のあるものだろうが、ここまでお金をかけずにやってきたポリシーが完全に崩されるのは許されない。cgiはphpと相性が悪い感じしてたので、ここらでお別れするときがやってきたと考えるべきだろう。これまで築き上げたノウハウは仕上げの段階で徒労に終わった。様々な発見や工夫は過去の遺跡となる。先見の明がなかった。こんなことになるなんて。でもポリシーは曲げられない。SQLiteでの新たな出会いに期待をこめて、このメモを書き始める。 PHP5でSQLiteを使用するための設定手順 all aboutに記事があった。 c windowsのphp.iniを変更 630行目あたりの以下3行 extension=php_pdo.dll extension=php_pdo_sqlite.dll extension=php_sqlite.dll のコメントアウトをはずして有効にする。 Apacheを再起動する。 ? phpinfo(); ? という内容のファイルをhtdocs内にtest.phpとファイル名をつけて保存。 http //localhost/test.phpをIEで確認。 スクロールすると、以下のようになっている。 PDO PDO support enabled PDO drivers sqlite, sqlite2 pdo_sqlite PDO Driver for SQLite 3.x enabled PECL Module version 1.0.1 $Id pdo_sqlite.c 293036 2010-01-03 09 23 27Z sebastian $ SQLite Library 3.3.7undefined SQLite PECL Module version 2.0-dev $Id sqlite.c 298697 2010-04-28 12 10 10Z iliaa $ SQLite Library 2.8.17 SQLite Encoding iso8859 まあ、たぶんOK。 後日談 (9月17日) PDOでSQLite3のデータベースを扱う場合、「extension=php_pdo_sqlite.dll」を有効にすればよい。前述の c windowsのphp.iniを変更 630行目あたりの以下3行 extension=php_pdo.dll extension=php_pdo_sqlite.dll ;extension=php_sqlite.dll の最後の行はコメントアウト。これはSQLite2が使えるようにするもの。これが使えると、かえってややこしいじゃないか。 ? phpinfo(); ? の実行結果 PDO PDO support enabled PDO drivers sqlite pdo_sqlite PDO Driver for SQLite 3.x enabled PECL Module version 1.0.1 $Id pdo_sqlite.c 293036 2010-01-03 09 23 27Z sebastian $ SQLite Library 3.3.7undefined ということで、SQLiteの記述はなくなり、PDOでSQLite3を使うことだけができるようになった。 SQLiteManagerを使ってみる ブラウザでデータベースを操作できるツールを使ってみよう。これも記事があった。 SQLiteManagerのダウンロードよりSQLiteManager-1.2.4.zipをダウンロード。 SQLiteManager-1.2.4.tar.gzとかいうわけのわからんファイルがあるがzipをさがしてそれをDL。 解凍するとSQLiteManager-1.2.4フォルダ内の中にさらにSQLiteManager-1.2.4フォルダがあり、それをApacheのhtdocsフォルダ内にコピー。 IEで http //localhost/SQLiteManager-1.2.4/index.php PupSQLiteを使ってみる SQliteのツールはいろいろあるがPupSQLiteは、Excelファイルのインポートができるという点ですばらしい。早速アミーゴのデータをCSV出力し、それをエクセルファイルにしてPupSQLiteでSQLiteのデータベースに変換した。それこそ1時間もあればできた。これは意外と順調だなあと思っていた。それも束の間。このDBファイルにPHPから接続しようとWEBに転がっているサンプルプログラムを動かしたが、。file is encrypted or is not a databaseというエラー。これはPupSQLiteがSQLite3のDBを作るから。今パソコンにインストールされているPHPは5.2で、これはSQLite2に対応している。SQLite3のDBファイルはPHP5.3で読むべき。PDOを使う手もある。あるいはSQLite3のDBファイルをSQLite2のDBファイルに変換するという方法もある。 SQLite2とSQLite3をダウンロードし、Zipを解凍。中に入っているのはそれぞれsqlite.exeとsqlite3.exeで、c:に置く。インストールは置くだけ。c に変換したいSQLite3のDBファイルtest3.dbを置く。コマンドプロンプトでcd c \ としたあと、 sqlite3 C \test3.db .dump | sqlite.exe C \test2.db とすれば、SQLite2形式のDBであるtest2.dbが出来上がる。簡単だったがなぜかサイズが倍に。しかも、PHPのサンプルで読み込んだテーブルは恐ろしく文字化けしていた。 もう、こうなったら、PHP5.3でやるしかないでしょ。 PHP5.3をインストール なんではじめからPHP5.3にしなかったのか。5.2の方が安定してると思ったのか。ともかくサーバー1台と作業用のパソコン2台のPHP5.2を5.3にする。 http //www.php.net/downloads.php より最新版のPHPをダウンロード。最新版PHPの「 WindowsBinaries 」にある http //windows.php.net/download/ と書いてあるリンクをクリック。 サーバにApacheを利用する場合はVC6にしろって書いてある。ははあ。だからか。 そんなことは無視だ。ともかくやってみなけりゃわからん。 PHP 5.3 (5.3.8) VC9 x86 Thread Safe (2011-Aug-23 12 01 10) ■Zip [15.06MB] をダウンロード。 Cドライブ内のPHP5.2が入れてあるphpフォルダを削除し、(これ、APACEをEXITで終わるだけでは使用中で、削除できない。コントロールパネル→パフォーマンスとメンテ→管理ツールのサービスで停止すること。)新たにダウンロードしたZIPファイルを解凍してできたフォルダをphpという名前でc に置く。 ディレクトリ内にある「 php5ts.dll 」ファイルをC \WINDOWSディレクトリ内のsystem32ディレクトリにコピー。 次に、「 php.ini-development 」ファイルをWINDOWSディレクトリにコピーした上でphp.ini-developmentファイルの名前を「 php.ini 」に変更。 httpd.conf の設定 次にPHPの設定を行う。 c \Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf をメモ帳やエディタで開く。 LoadModuleの項に次の行を追加。これでApache2にPHPモジュールを適用。 (Apache2.2.*をインストールしたためphp5apache2_2.dllを使う。) LoadModule php5_module c /php/php5apache2_2.dll cmd=upload act=open pageid=62 file=12.gif,blank) AddTypeの項の最後に次の行を追加し、Apache2にphpのファイル形式を定義。 AddType application/x-httpd-php .php cmd=upload act=open pageid=62 file=13.gif,blank) php.ini の設定 次に、c \WINDOWSディレクトリ内にあるphp.iniをメモ帳などで開き doc_root = を次のように追加して修正。 doc_root = "c /Program Files/Apache Software Foundation/Apache2.2/htdocs" さらに、次の行を変更。 「"./"」を「"c /php/ext"」に変更。 (変更前) extension_dir = "./" (変更後) extension_dir = "c /php/ext" 環境変数の追加 PHPをインストールしたディレクトリを環境変数に追加。 [WindowsXPの場合] 「マイコンピュータ」を右クリックし「プロパティ」をクリック、「詳細設定」タブから「環境変数」をクリック。 環境変数ダイアログが表示。 下段にある「システム環境変数」一覧から、変数名「Path」を選択し「編集」をクリック。システム変数の編集ダイアログが表示される。 「変数値」には既に値が入力されている。既にある入力値は消さないように注意。変数値の最後にPHPをインストールしたディレクトリを追加。環境変数はセミコロン「;」で区切られので、変数値の最後にセミコロンがない場合は「;c \php」を最後に追加。 Apacheの再起動 これらの設定が終わったらApache2を再起動して設定を有効にする(httpd.confやphp.iniなどの初期設定を変更した場合はApacheの再起動を行なう)。 タスクトレイにある「Apache Services」を右クリックして、「Open Apache Monitor」を選択。 Apache Service Monitorが起動。 Restartをクリックして再起動。 PHPの動作確認 設定が終了したらPHPの動作確認をする。エディタなどに以下のスクリプトを入力。 ?php phpinfo(); ? ファイルを C \Program Files\Apache Software Foundation\Apache2.2\htdocs\info.php 内に保存。ファイル名をinfo.phpなどと拡張子を.phpにする。そしてブラウザから http //localhost/info.php にアクセスしてversion情報がちゃんと表示されるか確認。 Mbstringを有効に http //www.aconus.com/~oyaji/www/apache_win_php.htm ■PHPの設定 PHPの設定は、C \PHP\php.ini-developmentを C \WINNT配下にコピーし、「php.ini」というファイル名に変更してこの内容を修正。 PHPの設定は結構厄介で、設定を誤ると文字化けに悩まされることになる。いろいろなサイトにphp.iniも設定例が載っているが、結論は以下のとおりです。 •一般的にPHPの記述コードとHTTP出力のコードは一致しているため、透過・無変換を基本とする。 → この設定なら、例えば、phpMyAdminはUTF-8で自作PHPはEUC-JPといった具合に、システムに複数のコード系が混在しても文字化けすることは無い。 •上記の条件に合わないアプリ(PHPの記述コードが EUC-JPでHTTP出力のコードがShift_JIS等)は、当該アプリだけ「.htaccess」で個別の変換を行うとよい。 → SmartyなどはEUC-JPが前提のためHTTP出力をShift_JISにしたりすると文字化け問題が発生するが、それはソフトのコーディーングの問題なので、個別に対処すべき。 設定変更したところ。 output_buffering = Off ;output_handler = default_charset = "" extension_dir = "c /php/ext" extension=php_mbstring.dll session.save_path = c /temp [mbstring] mbstring.language = Japanese mbstring.internal_encoding = EUC-JP mbstring.http_input = pass mbstring.http_output = pass mbstring.encoding_translation = Off mbstring.detect_order = EUC-JP,SJIS,JIS,UTF-8,ASCII mbstring.substitute_character = none; php.iniの設定の概要は、以下。 a.output_buffering = Off :一般的に出力バッファリング制御をチャント実行しているとは思えないので、ここはOffを指定。 b.;output_handler = :出力の変換をする場合は変換を有効にするためにmb_output_handlerを指定するが、無変換なので無効のままとする。 c.default_charset = "" : PHPがContent-type ヘッダでcharacter encodingを出力するコードを指定するが、コードはソフトに依存するのでcharsetの送信を無効(空)にし透過させる。 d.extension_dir = "c /php/ext"へのパスを指定 e.extension=php_mbstring.dll:extension は全てコメントアウトされているので、必要に応じてアンコメントアウト(行頭の「 ; 」を削除)する。 f.session.save_path = c /temp :セッションのデータが保存されるディレクトリ。デフォルトはインストールパーティションの/tempなので、C \tempになるが、Cには通常はないので、tempディレクトリを作成する。フラグメントを避けるためスワップとtempファイルはそれぞれ別の専用パーティションにしてあるので、そこを指定。 g.mbstring.language = Japanese : mbstringで使用される言語のデフォルト値 h.mbstring.internal_encoding = EUC-JP : 内部文字エンコーディングのデフォルト値 i.mbstring.http_input = pass : HTTP入力文字エンコーディングを指定するが、透過なので「pass」とする。 j.mbstring.http_output = pass : HTTP出力文字エンコーディングを指定するが、透過なので「pass」とする。 k.mbstring.encoding_translation = Off : HTTP入力文字エンコーディング検出および内部文字エンコーディングへの変換用であるが、無変換なので「Off」とする。 l.mbstring.detect_order = EUC-JP,SJIS,JIS,UTF-8,ASCII : 文字コードの検出順序でありデフォルトはauto。但し、autoの検出順序がASCII, JIS, UTF-8, EUC-JP, SJISのため誤検出するようなので、順序を入れ替え指定。 m.mbstring.substitute_character = none; : 無効な文字を代替する文字 なお、PHPはEUC-JPで記述されているが、HTTP出力では Shift_JISで出力されるような場合は、そのアプリだけ .htaccess で指定してあげればよい。PHPがEUC-JPで出力がShift_JISの場合の.htaccessの記述例を下記に示します。 なお、. htaccessで記述する場合は、下記が参考になる。 http //www.shigeweb.jp/php/project_p/?section=setup page=htaccess c windowsのphp.iniの変更つづき(SQLite関係) 970行目~980行目あたりの以下3行 extension=php_pdo_sqlite.dll extension=php_sqlite.dll extension=php_sqlite3.dll のコメントアウトをはずして有効にする。 Apacheを再起動する。 ?php phpinfo(); ? という内容のファイルをhtdocs内にtest.phpとファイル名をつけて保存。 http //localhost/test.phpをIEで確認。 スクロールすると、以下のようになっている。 pdo_sqlite PDO Driver for SQLite 3.x enabled SQLite Library 3.7.7.1 SQLite SQLite support enabled PECL Module version 2.0-dev $Id sqlite.c 306939 2011-01-01 02 19 59Z felipe $ SQLite Library 2.8.17 SQLite Encoding iso8859 Directive Local Value Master Value sqlite.assoc_case 0 0 sqlite3 SQLite3 support enabled SQLite3 module version 0.7-dev SQLite Library 3.7.7.1 Directive Local Value Master Value sqlite3.extension_dir no value no value この、sqlite3.extension_dirってのが何なんです? まあ、ともかく、駄目ですよって言われてたAPACHEとPHP5.3の組み合わせで 特に問題なくインストールできた。 しかし、不気味だね。本家がPHP5.3とAPACHEの組み合わせはエラーが出ますよって言っているのにそれを無視してやるってのはどうもね。爆弾抱えてるみたいでね。 そうこうしているうちに本が配達された。昨日の夜というか今日の朝というか午前1時ごろ注文したやつ。19時間ぐらいで配達されてきた。amazonのお急ぎ便。無料お試しだったので。有料ならやらない。そんなに急ぐことでもない。 西沢直木著 SQLite入門 第2版 翔泳社 2940円 高いけどネット見てもちりじりばらばらなことが書かれていてわからんし。しょうがない。アミーゴに4万円払うことを思えば安いもんだ。 ちょっと腰をすえて、本読んで勉強しないとだめだ。 しかし、肝心のこの本PHPは5.2の環境。SQLiteは基本2だ。3を使うのはPDOでやるという立場。現時点では確かにそうなるだろう。 SQLiteのSの字もわかっていないやつがえらそうなことを言うが、SQLiteのバージョンアップはややこしいことになっている。APACHEとの絡みからか、現時点でSQLite3が主流となりつつあるのに、PHPではSQLite2を基本としており、PDOでしかSQLite3に対応できないという形。もう少し本を読んでからPHPを5.3にすべきだったかも。しかし、インストールは正常にできたので、ローカルのパソコン1台はこのままPHP5.3でいこう。サーバーともう1台はPHP5.2のままでしばらく様子を見る。そのうちPHPの本家もAPACHEに対応するPHP5.4とか5.5とか出してくれるでしょ。ただで利用している人間が何も言う資格ないけどね。それを言っちゃーおしまいでしょう。だははははー。このページはこれくらいにしておこう。 後日談(9月17日) やはり、APACHEにPHP5.3はよくないようで、日付の表示で警告が出る。そのほかにもよくわからないことが頻発した。というわけで、現在はPHP5.2に戻している。もちろんSQLiteは3を使うので、PDO関数を使う。SQLite関数を使えるようにしても、それはSQLite2なので良くない。混乱を避けるため、使えなくしたほうが良い。