漢数字→アラビア数字変換ツール

必要にせまられて、PHPで漢数字→アラビア数字変換ミニアプリを作成したので、紹介しておきます。

漢数字→アラビア数字変換ツール

数字単体だけでなく、文章中に出てくる漢数字を半角アラビア数字に変換します。

なお、全角・半角の変換をしたい人には、

全角半角変換ツール

を紹介しておきます。

お約束ですが、ご利用は自己責任でお願いします。

カテゴリー: PHP, WEB | コメントする

MySQL予約語一覧

MySQLの予約語ではまったので覚書です。

とにかく予約語が多すぎ。カラムを作成する際は、カラム名と予約語を照らし合わせること。

出典
http://dev.mysql.com/doc/refman/5.1/ja/reserved-words.html

ACCESSIBLE ADD ALL
ALTER ANALYZE AND
AS ASC ASENSITIVE
BEFORE BETWEEN BIGINT
BINARY BLOB BOTH
BY CALL CASCADE
CASE CHANGE CHAR
CHARACTER CHECK COLLATE
COLUMN CONDITION CONSTRAINT
CONTINUE CONVERT CREATE
CROSS CURRENT_DATE CURRENT_TIME
CURRENT_TIMESTAMP CURRENT_USER CURSOR
DATABASE DATABASES DAY_HOUR
DAY_MICROSECOND DAY_MINUTE DAY_SECOND
DEC DECIMAL DECLARE
DEFAULT DELAYED DELETE
DESC DESCRIBE DETERMINISTIC
DISTINCT DISTINCTROW DIV
DOUBLE DROP DUAL
EACH ELSE ELSEIF
ENCLOSED ESCAPED EXISTS
EXIT EXPLAIN FALSE
FETCH FLOAT FLOAT4
FLOAT8 FOR FORCE
FOREIGN FROM FULLTEXT
GRANT GROUP HAVING
HIGH_PRIORITY HOUR_MICROSECOND HOUR_MINUTE
HOUR_SECOND IF IGNORE
IN INDEX INFILE
INNER INOUT INSENSITIVE
INSERT INT INT1
INT2 INT3 INT4
INT8 INTEGER INTERVAL
INTO IS ITERATE
JOIN KEY KEYS
KILL LEADING LEAVE
LEFT LIKE LIMIT
LINEAR LINES LOAD
LOCALTIME LOCALTIMESTAMP LOCK
LONG LONGBLOB LONGTEXT
LOOP LOW_PRIORITY MASTER_SSL_VERIFY_SERVER_CERT
MATCH MEDIUMBLOB MEDIUMINT
MEDIUMTEXT MIDDLEINT MINUTE_MICROSECOND
MINUTE_SECOND MOD MODIFIES
NATURAL NOT NO_WRITE_TO_BINLOG
NULL NUMERIC ON
OPTIMIZE OPTION OPTIONALLY
OR ORDER OUT
OUTER OUTFILE PRECISION
PRIMARY PROCEDURE PURGE
RANGE READ READS
READ_ONLY READ_WRITE REAL
REFERENCES REGEXP RELEASE
RENAME REPEAT REPLACE
REQUIRE RESTRICT RETURN
REVOKE RIGHT RLIKE
SCHEMA SCHEMAS SECOND_MICROSECOND
SELECT SENSITIVE SEPARATOR
SET SHOW SMALLINT
SPATIAL SPECIFIC SQL
SQLEXCEPTION SQLSTATE SQLWARNING
SQL_BIG_RESULT SQL_CALC_FOUND_ROWS SQL_SMALL_RESULT
SSL STARTING STRAIGHT_JOIN
TABLE TERMINATED THEN
TINYBLOB TINYINT TINYTEXT
TO TRAILING TRIGGER
TRUE UNDO UNION
UNIQUE UNLOCK UNSIGNED
UPDATE USAGE USE
USING UTC_DATE UTC_TIME
UTC_TIMESTAMP VALUES VARBINARY
VARCHAR VARCHARACTER VARYING
WHEN WHERE WHILE
WITH WRITE XOR
YEAR_MONTH ZEROFILL

こんなにもあります。今後の予定とされている予約語もあります。

以下はMySQL 5.1で登場する新規の予約語です。

ACCESSIBLE LINEAR MASTER_SSL_VERIFY_SERVER_CERT
RANGE READ_WRITE

以前は、keyというワードで引っ掛かったのですが、今回は、explain というカラム名で引っ掛かりました。explain なんてどうして予約語なのだろう。

カテゴリー: SQL | コメントする

【PDO】bindParamとbindValueの違い【PHP】

bindParamとbindValueの違いについての覚書です。

bindValue : 値をパラメータにバインドする
プリペアドステートメントで使用する SQL 文の中で、対応する名前あるいは疑問符のプレースホルダに値をバインドします。

bindParam : 指定された変数名にパラメータをバインドする
準備された SQL ステートメント中で、   対応する名前もしくは疑問符プレースホルダにパラメータをバインドします。   PDOStatement::bindValue() と異なり、   変数は参照としてバインドされ、PDOStatement::execute()がコールされたときのみ評価されます。

PHPマニュアルの該当箇所には、このような説明があります。

ただ、これだけでは何のことかイマイチ分かりません。

この二つで分かりやすいのは、単純な動作のbindValueです。

基本的な動作は、こちらが素直です。どういうことかというと、bindValueメソッドが実行されると、その時点で、バインドされる値が確定します。下のコードだと、150とredという値が、bindValueされる時点で確定するということです。言い換えると、executeされる前に値が確定するのです。

$calories = 150;
$colour = 'red';
$sth = $dbh->prepare('SELECT name, colour, calories
    FROM fruit
    WHERE calories < :calories AND colour = :colour');
$sth->bindValue(':calories', $calories, PDO::PARAM_INT);
$sth->bindValue(':colour', $colour, PDO::PARAM_STR);
$sth->execute();

これに対して、bindParamは、値が確定するタイミングが、bindValueよりも遅くなります。どういうことかというと、executeされるまでは、値を参照しているにすぎないのです。つまり、bindParamしても、値は確定していない。言い換えると、参照している変数の中身が変わると、別の値がバインドされる可能性があるということです。

これは、bindParamをループ内で使用すると不具合となって表れます。

Vili28-May-2010 12:01

//これは動かない。なぜなら、$valの値が上書きされてしまうから。
This will fail ($val by value, because bindParam needs &$variable):
<?php
foreach ($params as $key => $val) {
    $sth->bindParam($key, $val);
}
?>

//これは上手く動く。なぜなら、参照を渡しているから。
This works ($val by reference):
<?php
foreach ($params as $key => &$val) {
 $sth->bindParam($key, $val);
}
?>

上のように、&をつけて参照にすると上手く動きますが、このような場合には、bindValueして、その時点で値を確定してやると、同様に上手く動くようになります。

PHPの参考書などでは、理由なくbindParamの方が多用されていますが、単純なバインドをするなら、bindValueで足りると思われます。

ループ内でbindParamをして不具合が生じているなら、以上の点を確認してみると上手くいくはずです。

カテゴリー: PHP | コメントする

【XAMPP】errorディレクトリが403エラーの件

XAMPPでローカル環境を構築しているのですが、一点、どうしても分からないことがあります。ちなみに、ヴァージョンは、1.7.4です。

例として、XAMPPで、example.comを運用しているとします。

その際、エラー関係表示用に、errorディレクトリを作成し利用。

つまり、http://example.com/error/

として、運用するわけです。

このerrorディレクトリが下のように403エラーになり表示されません。

Access forbidden!
要求されたディレクトリへのアクセス権限がありません。
インデックスドキュメントが存在しないか、ディレクトリの読み込みが
許可されていません。
サーバーの障害と思われる場合は、ウェブ管理者までご連絡ください。
Error 403

他のディレクトは、問題なく表示されるのに。

色々、検索して調べても原因が不明です。同じ症状の人がいないのかな。

ためしに、errorディレクトリをerror1とかに少し変えてやると上手く表示できます。

ちなみに、本番環境のレンタルサーバーでは、errorディレクトリのままで上手くいきます。

多分、XAMPPのapachの設定がerrorディレクトリを何か特別な意味の有るものとしていると推測されるのですが、詳細が掴めません。

解決策ができたら、解決法をアップする予定です。それまで。

以上です。

カテゴリー: PHP | コメントする

【XAMPP】VirtualHostの設定【PHP】

XAMPPでのVirtualHostの設定の覚書です。

なお、ここで使用するXAMPPのバージョンは、1.7.4です。利用するPCはvistaです。

VirtualHostの設定をすると、ローカル環境で通常のドメインのようにWEB開発をすることができます。

設定無し:http://localhost/example.com/

設定有り:http://example.com

設定有りにしてやると、localhostのパスが不要になり、より本番環境に近い開発ができます。一番の利点には、絶対パスと相対パスが本番環境と同じになることが挙げられます。

VirtualHostの設定手順は、大きく二つに分かれます。

1.XAMPPの処理・・・httpd-vhosts.confの設定

2.利用するパソコンの処理・・・hostファイルの設定

それぞれ、10分前後で終わるので、初心者の人も試してみる価値があると思います。

それでは、実際に、設定してみましょう。

1.XAMPPの処理・・・httpd-vhosts.confの設定

XAMPP1.7.4では、httpd-vhosts.confに設定を書き加えます。

ファイルのある場所は、

C:\xampp\apache\conf\extra\httpd-vhosts.conf

になります。利用するテキストエディタでファイルを開きます。

そうしたら、

NameVirtualHost *:80

の行を見つけます。1.7.4では、20行目あたりになります。

この文の先頭に#があるなら、外します。#はコメントであり、外すことで設定が有効になります。

次に、先ほどの行の下に、ヴァーチャルホストの設定を書き加えます。

<VirtualHost *:80>
DocumentRoot "C:/xampp/htdocs"
ServerName localhost
</VirtualHost>

<VirtualHost *:80>
DocumentRoot "C:/xampp/htdocs/example.com"
ServerName example.com 
</VirtualHost>

一つ目は、localhostをhtdocsのルートにする設定です。

二つ目が、自分が利用したいドメイン名を設定する処理です。example.comを自分のドメインに書き換えてください。DocumentRoot と ServerName の2行を書き換える必要があります。

ここまで書き換えたら保存します。ここで、1段階目の処理が終了です。次に2段階目の処理に移ります。

2.利用するパソコンの処理・・・hostファイルの設定

今度は、自分のパソコン(windows)の設定をします。

ここでは、windows付属のメモ帳を使います。

スタートメニュー → すべてのプログラム → アクセサリ → メモ帳 と選択して、メモ帳の上で右クリック。管理者として実行を選択します。

空のメモ帳が開いたら、「ファイル」を選択し「開く」を選択します。

hostファイルのある場所は、

C:\WINDOWS\system32\drivers\etc\host

になります。ただし、etcまで行っても何もファイルが表示されないと思います。

ここで、ウインドウ右下の「テキスト文書(※.txt)」を「すべてのファイル」に変更してやります。すると、hostファイルが表示されるようになります。

表示されたら開いて編集します。

書き加えるのは以下の2行です。

127.0.0.1       localhost
127.0.0.1       example.com

もし、上のlocalhostの行があれば、下の一行を書き加えるだけでOKです。

ちなみに、ここでも、#は外しておきます。有効にするには、#を外すのです。

これで、2段階目も終了です。

さて、最後に、XAMPPを一度、終了して、再度、起動してみましょう。立ち上げたら、自分の利用するドメイン(ここでは、exmaple.com)

http://example.com

にアクセスしてみましょう。

http://localhost/example.com

にしなくても、表示されていると思います。

以上です。

カテゴリー: PHP, WEB | コメントする