2009年12月24日木曜日

シングルクオーテーションを忘れてなりませんね

PHP文内で、
"insert into COLUMN_NAME values('$A','$B','$C')(\"$A\",\"$B\",\"$C\")";のようにするとき、
ダブルクオーテーションシングルクオーテーションを忘れて、($A,$B,$C)のようにしてエラーが出て悩んだ。。


ダブルクオーテーションシングルクオーテーションを忘れてなりませんね。。

■上記文で「ダブルクオーテーション」と最初書いていましたが、SQL文ではシングルクオーテーションでくくるべきなのですね。。お恥ずかしい。失礼しました。

■追記2:しかも、シングルクオーテーションのまえに「円マーク(¥の半角)=ほんとうはバックスラッシュ」すらいらないんですね。。円マークの記述が必要なければ楽ですね。

カラム名の変更

alter table TABLE_NAME
change OLD_COLUMN_NAME NEW_COLUMN_NAME int not null auto_increment;
のように書く。

型の変更がなくても型を書かなければerrorに。

primary keyはこのchangeでは変更できず。(予めprimary keyを設定してあるカラムの場合は、そのままprimary keyが生きる。)

カラムの順番変更

カラムの順番変更は簡単ではないと判明。
alter table でdropして、その後またaddするなどの手順が必要。

基本、select文でカラム順を指定すれば問題ないので、いいといえばいいのだが。。

MySQLでは簡単でした。以下、引用。要するに、「addやmodifyなどのあとで、after column_nameなどのようにしてやればOK」、ということでした。便利。。
http://dev.mysql.com/doc/refman/4.1/ja/alter-table.html
MySQL バージョン 3.22 以降では、FIRST または ADD ... AFTER col_name を使用して、テーブルレコード内の特定の位置にカラムを追加することができる。デフォルトでは、レコードの最後にカラムが追加される。 MySQL バージョン 4.0.1 以降では、CHANGEMODIFY でも、FIRST および AFTER キーワードを使用できる。
 

2009年12月22日火曜日

NULL値のあるカラムでgroup byは、せっかくのLEFT JOINをダメにする。。。

MySQLでLEFT JOINしても、右テーブル内の値がNULLのカラムをgroup byしてしまうと、NULLのレコードがなくなってしまい、優先度の高い左テーブルのレコードまでselectで吐き出されない、という現象に悩みました。

NULL値のあるカラムではgroup byしないように、他のカラムを選択すればいいですね。当然か。。。(^^;

unexpected T_VARIABLEに悩んで。。。(全角スペースが原因だった。。orz)

「unexpected T_VARIABLE」というエラー表示が出るので、
指定行をいろいろ修正してもダメでした。

万事休す、というところで、その行の先頭のスペースを何の気なしにドラッグしてみると、「全角スペース」の予感。。。。。

そいつを消して、半角スペースに直すと、あっさり動いてくれました。。。。。。。

全角スペース、恐るべし。

mysql_fetch_array()とwhile。

mysql_fetch_array()で取得する値(配列)を$rowに代入して使う際、while()の中に記入して使うのですね。
while($row=mysql_fetch_array($sql)){
}
みたいな。

whileの外で代入して、それをforeachしてもエラーが出るので、しばし悩みました。。

素人丸出し!

”=”と”==”は違うんすよね。。。

PHPを学習し始めて、躓いたことの一つに”=”の取り扱いがありました。

”=”は一般的な数学でいうところの”=(等号)”ではなく、”代入”の意味合いなのだということがわかりにくかった。。

今日も、”=”を等号として考えてしまって、プログラムが動かず、しばし悩みました。。

”==”が”等しい”の意味なんですよね。
(ついでに”===”が型も等しいの意味ですね。。。)

2009年12月21日月曜日

テーブル名変更はalter table ~ rename to ~;

参考になったページはこちら。
http://sasuke.main.jp/rename.html

alter table ~ rename to ~;
でテーブル名変更。

■追記:table名をシングルクオーテーションで囲ったら、エラーが出ました。囲ってはならないようです。
 少なくとも、自分の環境では、囲ってはいけませんでした。

2009年12月16日水曜日

ヒアドキュメントは変数が展開されて便利

ヒアドキュメントは、変数が展開されて非常に便利と判明。
それまで変数部分の書き方で苦労してました(^^;

たとえば、以下のようなケースだと、formの各HTML要素でダブルクオーテーションを入力するたびにバックスラッシュ(¥マーク)も入力せず、各行echoもせず、ヒアドキュメントで一括にやれるのは、ほんとありがたいな、と。
しかしこれも、「変数が展開されないと変数入りの場合使えない」と思っていたので、ちゃんと展開されると知り、よかったな、と。あたりまえか。
初心者まるだしです(笑)。

echo <<<EOT
<form action="post.php" method="post">
<p>・日付<br />
<input type="text" name="date" value="$date" size=60></p>
<p>・タイトル<br />
<input type="text" name="title" size=60></p> 
・・・・・(略) 
EOT;

■また、恥ずかしながら初学者で、「<<<」か「>>>」か良く間違えてましたが、「<<<」ですね。
「始まり方向である小なり記号を三つ」ということで覚えました。。

2009年12月9日水曜日

CodeIgniter導入時の覚え書き

CodeIgniterをしっかり勉強しようとして、環境準備したので、備忘録。

「CodeIgniter徹底入門」のP30~をしっかりみて、設定すべし。

php.iniには、以下のコードを追加。
xdebug.remot_log="C:\xampp\apache\logs\xdebug.log"
xdebug.manual_url="http://jp2.php.net"
xdebug.collect_params=true
xdebug.dump.GET=*
xdebug.dump.POST=*
 .htaccessには以下のコードを。

RewriteEngine on
RewriteCond $1 !^(index\.php|css|user_guide|.+\.gif$|.+\.jpg$|.+\.png$|.+\.js$)
RewriteRule ^(.*)$ /ci/index.php/$1 [L]

素のPHPみたいにすぐ導入できないが、うまくcontrollers以下のファイルがURIとしてrewriteされて表示されると嬉しや。

2009年12月8日火曜日

nl2brを使わず、改行コードを二つに。

nl2br関数では改行が一行だが、段落的にもう一行改行を入れたら見やすいだろうと思って、

を挿入するコードを模索しました。


すると、以下のページに良いヒントが。
http://q.hatena.ne.jp/1253302152


preg_replace()で
preg_replace( '/\n|\r|(\r\n)/', "<br />", $s );
のようにすると、無事改行が二つ入ってくれました。

要するに、自分はwin環境なので、\nと\rの両方が入っているので、<br />
が二つ入ったというわけかな。。

というわけで、上記から(\r\n)の部分を抜いて、
function mynl2br($s){
preg_replace('/\n|\r/',"<br />",$s);
}
みたいにしてもいけました。
よかった。

2009年12月2日水曜日

MySQLでフィールド名を変更。

MySQLでフィールド名を変更した際のメモ。

ALTER table テーブル名 change 旧名 新名 型;

でフィールド名が変更できる。
型を省くとエラーが出ました。

2009年11月30日月曜日

phpマニュアルの高速検索 on Firefox

phpマニュアルの関数サーチを、FirefoxのURL入力&表示する窓で瞬時に使える方法を知りました。
感動したのでメモ。
以下、参考になったページ。
http://fg-180.katamayu.net/archives/2005/11/18/223421

こいつあ使えます。

これだと、PHPの関数の検索窓で右クリックなどをし、「この検索にキーワードを設定」を選んを登録すると、すぐ検索できるようになります。


他の検索エンジンも登録しておくと、設定した短い文字の入力+検索文字を入力するだけで、そのエンジンでの検索ができます。



ためしに、日本語のPHPマニュアル検索を「p」という名前で登録し、
pを入力した後半角スペースに続けて、あいまいな関数名の一部を入力すると(例:「mysql」とか)、


その文字の入った関数候補群を表示してくれます。


大変ありがたいです。

あいまい検索もOKなのが便利ですね。PHPマニュアル。

2009年11月29日日曜日

新規フィールドの先頭への追加。

alter table テーブル名 add 新規フィールド名 データ型 first;
で、先頭に新規フィールドを追加できる。

便利。

2009年11月23日月曜日

スタンドアロンのPHPエディター

eclipseの開発環境は素晴らしいのですが、起動に時間がかかるので、
ちょっとしたことを書く際に使うことが面倒な感じがしていました。

そこでいろいろ探していて、
php editorのスタンドアロン版があり、これはいい感じでした。

特に気に入ったのは、PHP関数名をドラッグして選択し、F1キーを押すと、
すぐにPHPマニュアルの該当箇所が表示される、という機能です。
初学者には大変助けになります。
ありがたや。。

MySQlって怖いと思ってましたが。

データベースって、触るとデータを壊してしまんじゃないか、と勝手に怖がってました。

が、ローカルで環境を作って、適当なDBとテーブルを作っていろいろいじってみたら、
それほど怖くない、とわかってきました。
(もちろん、本番データを適当にいじることは怖すぎます。が本番データでもselect文で見るぐらいなら乞わなくないことも分かってきてよかったです。)

それにしてもローカル内にxamppやMAMPで開発環境を作れるのは素晴らしいですね。
ありがたい限りです。。。

2009年11月22日日曜日

PHPでのローカルMySQLへの接続、簡単で、カンドー

初学者なので、一々PHP+MySQLが一つうまくいく毎に感動するのですが(笑)、
今日は、PHPでMySQlに接続する方法を学習して感動しました。

これまで各種のソースコードではよく見ていましたが、
自分でMySQLへの接続文を書いたことがなく不明確だったので、
本を見ながらソースを書いて、localhostのMySQLに接続し、
データが取得できたのには感動しました。

接続って、簡単なんですね。。。。。

<?php
 mysql_connect(localhost,ユーザーID,パスワード);
 mysql_select_db(データベース名);

とりあえず、これで接続。

その後、
 $sql="select * from テーブル名";
 $result=mysql_query($sql);
 $rows=mysql_num_rows($result);
     if($rows==0){
    echo "<p>該当データなし</p>";
    }
     else{
        while($row=mysql_fetch_array($result)){
            echo"<p>";
            echo $row["フィールド名"].":";
            echo $row["フィールド名2"];
            echo"</p>";
        }
    }

?>
みたいな。

2009年11月17日火曜日

いい感じのMySQLクライアント

http://www.navicat.jp/premium/download/index_lite.html

MySQLクライアントとしてnavicat premium lite版を使ってみました。
非常に便利でした。

非商用利用でlite版が使えます。

phpmyadminとコマンドラインだけではやりにくかったので、ありがたいです。。。

グループ化は、GROUP BY と HAVING

MySQLでグループ化するのは、GROUP BY。
条件づけはHAVING。WHEREではなく。

グループ化したものをCOUNTすると便利。