PHP 『 超 』 初心者勉強会(PHPでMySQL) 5回目に参加して来ました。

5回目。実は4回目も参加したんだけど、大遅刻して、全体の3割くらいしか話が聞けなくて、ちゃんと理解できていなかったので記事にしませんでした。今度から(なるべく)ちゃんと出ます。たぶん。

今回はいよいよphpからsql文を投げる話。
と言っても、まだローカル環境の連想配列がとれただけの段階だけど。
それでも、なにか始まって来ました感が出て来て嬉しい。

PHPって、いろんな処理をWebに最適化して簡略に書ける言語で、それが一番の売りみたいなんだけど、入門編の学習者にとっては「そこで何が省略されているか」を想像して補完する必要があるように感じた(今更)。
特にプログラムを書くこと自体の初心者のための学習用のコードと、現場で書くようなコードでは相当差がありそう。
例えば
[sourcecode language=”php”]
// MySQLに接続する
if($con = mysql_connect($host,$user,$pass)){
[/sourcecode]
これは、いろんな処理がずいぶん挟まっているはずだなーすげーなー、とか。

ところで、この「mysql_connect($host,$user,$pass)」の部分。PHPからMySQLに接続して返事を待つわけだから「どれくらい待つんですか?」と聞いたら。「返事が来るまで」との回答。返事が来るまでは、それ以降の処理が全く進まないらしい。
もし、MySQLの処理があまりにもかかるようだと、PHPの処理時間がかかりすぎるという判断でアパッチ側からPHP自体が止められちゃうとのこと。なるほど。

[sourcecode language=”php”]
<?php

$host = ‘localhost’;
$user = ‘sample’;
$pass = ‘123456’;
$db = ‘sample’;

/*
if文の中のmysql_query()とかはsqlから返事があるまで
PHPはずっとその段階で止まっている。
もし、mysqlの処理が1分とかかかるような場合は、
アパッチにPHPの処理が切られちゃうんじゃないかなー
*/
// MySQLに接続する
if($con = mysql_connect($host,$user,$pass)){
echo ‘OK<br/>’;
}else{
echo ‘NG<br/>’;
exit;
}

// データベースの選択
if( mysql_select_db( $db, $con ) ){
echo ‘OK<br/>’;
}else{
echo mysql_error($con);
exit;
}

// 文字コードの設定
if( mysql_query(‘SET NAMES utf8’,$con) ){ // Shift JIS = sjis, EUC JP = ujis
echo ‘OK<br/>’;
}else{
echo mysql_error($con);
exit;
}

// SQLの送信
$sql = " SELECT * FROM t_title ";
//resはリソース。連想配列とかではなくて、リソース型
$res = mysql_query($sql, $con);
if(mysql_errno($con)){
echo mysql_error($con);
echo $sql;
}

/*
// ループ
while($record = mysql_fetch_assoc($res)){
var_dump($record);
echo "<h2> {$record[‘title’]} </h2>";
}
*/
$record = mysql_fetch_assoc($res);
//連想配列でアクセス
echo $record[‘title_id’];
echo ‘ – ‘;
echo $record[‘title’];
echo ‘ – ‘;
echo $record[‘insert_time’];
echo ‘<br />’;

exit;

$val = mysql_real_escape_string($val);
$res = mysql_query($sql, $con);
$err = mysql_errno($con);
$str = mysql_error($con);
$row = mysql_num_rows($res);
$row = mysql_affected_rows($con);

[/sourcecode]