3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。(jehupc.exblog.jpから移転中)

(PHP)MySQLへの接続時SET NAMESは使わないほうがいい

(cakePHP)MySQL保存時に文字化けしないようにする。でも書いたんですが、MySQL接続時のクライアント文字コードをしていする SET NAMES クエリですが、これはSQLインジェクションにつながる可能性があるらしく、使わないほうがいいらしいです。

変わりに、5.2.3以降で追加されたAPIである mysql_set_charset() が推奨されてます。

でも、ちょっと古いレンタルサーバだといまだに5.1だったりするんですよね。。。。

ということで、MySQLの接続方法も忘れやすいのでのっけときます。

//DB接続諸々

$cn = DB_Connect();

if (! $cn ){

die;

}

//クエリ

$query = "SELECT * FROM genre";

//クエリ実行

$result = mysql_query($query);

if (!$result) {

$message = 'Invalid query: ' . mysql_error() . "\n";

$message .= 'Whole query: ' . $query;

die($message);

}

$genreAry = array();

//結果を取り出す。

while ($row = mysql_fetch_assoc($result)) {

array_push($genreAry ,array("id" => $row["id"] , "name" => $row["name"]));

}

//解放処理

mysql_free_result($result);

mysql_close($db);

 

 

//DB接続関数

function DB_Connect(){

$db_host = "localhost";

$db_user = "root";

$db_passwd = "passwd";

//DB接続

$db = mysql_connect($db_host,$db_user,$db_passwd);

if ( ! $db ){

return false;

}

// MySQL DB 選択

if (!(mysql_select_db("dbname"))) {

die;

}

//mysql_query('SET NAMES sjis'); //mysql_set_charsetが使えない場合

//SET NAMESの代わりとして新たに追加さえたAPI

mysql_set_charset("sjis" , $db);

return $db;

}

参考:

さぼてん: PHP+MySQL+UTF-8で文字化け対策