「PHP」カテゴリーアーカイブ

PHP内のSQL文で文字列と変数を連結

データーベースに「商品1」から「商品10」までの値を一気に追加したかったので、PHPのfor文を使って操作しようと思ったが、一時間ほどエラーと戦うことになった。 以下が完成したコード
<?php

for($i=1; $i<=10; $i++){
  mysql_query("INSERT INTO my_items SET item_name=CONCAT('商品', $i)");
}

まず、ダブルクォテーションじゃないと変数を展開できないので、mysql_queryの引数はダブルクォテーションで囲まないといけない。 ウチは、ここをシングルクォテーションで囲んでしまったので、「Unknown column ‘$i’ in ‘field list’」というエラーが出た。

次に、「商品」という文字列と変数「$i」を連結しないといけない。 MySQLで文字列を連結させるには、CONCAT関数を使わないといけないらしい。
CONCAT(‘文字列1’, ‘文字列2’)
ウチは、それを知らず、PHPの連結と同じ調子で.(ピリオド)を使ってしまいエラー。 とりあえず解決したものの、一行ずつ挿入した方が早かった。 でも、こういうエラーを解決していくことが上達していくカギなのかなとも思ったり(;´д`)トホホ…

PHPでFizzBuzz問題を解いてみた

「プログラミング できない」などの単語でググっていたらFizzBuzz問題というのを発見した。 内容は,「1から100までの数をプリントするプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。」というものだ。最初問題を見た時、なんとなくforとifを使うんだろうなと思ったが、書いてみると1発ではうまくいかなかった。 そして、実際に完成したコードはこちら。
<?php
for($i=1; $i<100; $i++){
    if($i%15==0){
        echo "FizzBuzz";
    }else if($i%3==0){
       echo "Fizz";
    }else if($i%5==0){
        echo "Buzz";
    }else{
        echo $i;
    }
}
?>

最初に書いたものはifの出力にechoではなく、ただ単に$i=”FizzBuzz”と代入して最後にechoで一気に出力させるという意味のわからないことをやってしまった。 当然エラー。

次に書きなおしたものも失敗。 「$i % 3==0」を先に書いていたので、15の倍数の時に「Fizz」としか表示されず。 それを修正してやっと完成!

ただ本やコードを読むだけじゃなく、実際にコードを書いてみるといういわゆるアウトプットという作業も大事だなぁと思った。 クオテーションの付け忘れなどの細かいところの間違いも読むだけじゃ中々身につかないので、ある程度プログラムの概要が分かってきたら、コードをどんどん書いていきたい。