最後の一文字を消去(substr関数) 
チョコボールです。
12月から派遣社員として働いておりましたが、明日から社員としてお世話になることになりました。
プログラム言語を学び始めて約半年。
まだまだビギナー的な書き方になるとは思いますが今後とも宜しくお願いします。
ようやくCakePHPでの開発に慣れて来たところです。
CakePHP 1.2系列のPaginatorヘルパーを使ってのページング処理やソート機能はヒジョ~~~に便利です。
自宅で個人的に関わっているサイトもCakePHPに乗り換え中です。笑
1.1には無かった機能だったので感動しました。
また、フレームワークのコアな部分での洗練されたクラスのメソッド群を見てると非常に勉強になります。
今回の記事ですが、フレームワークで開発を行ってる方は単純なSQL文による処理の場合、
直接SQL文を書かずにMODELクラスのメソッド等を利用している方が多いと思いますが…
PHP側で全て直でSQLを書いていた頃にハマったことを思い出したのでそのことでも書いてみます。
『複数のユーザーネームを条件に、PHP側からMySQLデータベース内のusersテーブルのstatusカラムの値を’Normal’に変更したい』
というシチュエーション。
UPDATE users SET status = 'Normal'
WHERE name IN ('山田','田中',………………,'鈴木')
こんな感じのSQL文になるのが理想(?)ですが、
自分はまず『’名前’,』 の部分を配列に格納してしまってループさせたい、と考えました。
この場合、最後の『,』1文字だけが邪魔になります。
そこで…substr関数を使って最後の一文字を削るのです!
// $user_namesに多数のユーザーネームが配列として格納されているとする
// 変数の初期化(次のループで文字列を連結するための準備)
$user_name_str = "";
foreach($user_names as $user_name){
$user_name_str .= "'".mysql_real_escape_string($user_name)."',";
}
// 最後の1文字(カンマ)を削除
$user_name_str = substr($user_name_str, 0, -1);
$sql = "UPDATE users SET status = 'Normal' WHERE name IN (".$user_name_str.")";
文字列関数はたくさん知っておいたほうが何かと役に立ちますね。
【追記】
開発部ののびーにょさんからもっと楽な方法を教わりました(^^;)
$in = "'".implode("','",$user_names)."'";
$sql = "UPDATE users SET status = 'Normal' WHERE name IN (".$in.")";