(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;
}
参考: