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 旧名 新名 型;

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