ブログ

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

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

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

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

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

    全角半角変換ツール

    を紹介しておきます。

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

  • 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 なんてどうして予約語なのだろう。

  • 【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をして不具合が生じているなら、以上の点を確認してみると上手くいくはずです。

  • 【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ディレクトリを何か特別な意味の有るものとしていると推測されるのですが、詳細が掴めません。

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

    以上です。

  • 【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

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

    以上です。