必要にせまられて、PHPで漢数字→アラビア数字変換ミニアプリを作成したので、紹介しておきます。
数字単体だけでなく、文章中に出てくる漢数字を半角アラビア数字に変換します。
なお、全角・半角の変換をしたい人には、
を紹介しておきます。
お約束ですが、ご利用は自己責任でお願いします。
必要にせまられて、PHPで漢数字→アラビア数字変換ミニアプリを作成したので、紹介しておきます。
数字単体だけでなく、文章中に出てくる漢数字を半角アラビア数字に変換します。
なお、全角・半角の変換をしたい人には、
を紹介しておきます。
お約束ですが、ご利用は自己責任でお願いします。
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 なんてどうして予約語なのだろう。
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をして不具合が生じているなら、以上の点を確認してみると上手くいくはずです。
XAMPPでローカル環境を構築しているのですが、一点、どうしても分からないことがあります。ちなみに、ヴァージョンは、1.7.4です。
例として、XAMPPで、example.comを運用しているとします。
その際、エラー関係表示用に、errorディレクトリを作成し利用。
つまり、http://example.com/error/
として、運用するわけです。
このerrorディレクトリが下のように403エラーになり表示されません。
Access forbidden! 要求されたディレクトリへのアクセス権限がありません。 インデックスドキュメントが存在しないか、ディレクトリの読み込みが 許可されていません。 サーバーの障害と思われる場合は、ウェブ管理者までご連絡ください。 Error 403
他のディレクトは、問題なく表示されるのに。
色々、検索して調べても原因が不明です。同じ症状の人がいないのかな。
ためしに、errorディレクトリをerror1とかに少し変えてやると上手く表示できます。
ちなみに、本番環境のレンタルサーバーでは、errorディレクトリのままで上手くいきます。
多分、XAMPPのapachの設定がerrorディレクトリを何か特別な意味の有るものとしていると推測されるのですが、詳細が掴めません。
解決策ができたら、解決法をアップする予定です。それまで。
以上です。
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分前後で終わるので、初心者の人も試してみる価値があると思います。
それでは、実際に、設定してみましょう。
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段階目の処理に移ります。
今度は、自分のパソコン(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
にしなくても、表示されていると思います。
以上です。