Search
  1. mysql_client_encoding〔文字セット名を取得〕
  2. mysql_escape_string〔文字列をエスケープ〕
  3. mysql_real_escape_string〔SQL文中で用いる文字列の特殊文字をエスケープする〕

mysql_client_encoding
文字セット名を取得

unknown

string mysql_client_encoding ( [ resource 接続ID ] )

MySQLのデフォルトの文字セット名(character_set)を返します。

オプションの第1引数接続IDが指定されていない場合は、mysql_connect()関数により直近に開かれた接続が使用されます。 接続が確立されていない場合は、引数を指定せずmysql_connect()関数がコールされた時と同様に接続を確立します。 それでも接続が確立できない場合は、E_WARNINGレベルのエラーが発生します。

<?
$dbc=mysql_connect('localhost''root''') or die("MySQL接続失敗 :".mysql_error());
/* 文字セット名取得 */
$charset=mysql_client_encoding($dbc);
echo $charset."<br>"//latin1
?>

mysql_escape_string
文字列をエスケープ

unknown

string mysql_escape_string ( string $エスケープされる文字列 )

SQL文中の特殊文字ををエスケープし、クエリ(mysql_query()関数)で使用できる形式に変換します。

<?
/* SQL文をエスケープ */
$sql "SELECT * FROM tbl_customer WHERE status LIKE '%aaa%' or status = 'd\"あ#d'";
echo $sql."<br>\n";
echo mysql_escape_string($sql)."<br>\n";

//SELECT * FROM tblname WHERE status LIKE '%aaa%' or status = 'd"あ#d'
//SELECT * FROM tblname WHERE status LIKE \'%aaa%\' or status = \'d\"あ#d\'
?>


<?
function enc($x){
  return base64_encode(serialize($x));
}

function dec($x){
  return unserialize(base64_decode($x));
}
$sql "SELECT * FROM tblname WHERE status LIKE '%aaa%' or status = 'd\"あ#d'";
$xx enc($sql);
echo "sql=".$sql."<br>\n";
echo "enc=".$xx."<br>\n";
echo "dec=".dec($xx)."<br>\n";

//sql=SELECT * FROM tblname WHERE status LIKE '%aaa%' or status = 'd"あ#d'
//enc=czo2ODoiU0VMRUNUICogRlJPTSB0YmxuYW1lIFdIRVJFIHN0YXR1cyBMSUtFICclYWFhJScgb3Igc3RhdHVzID0gJ2QigqAjZCciOw==
//dec=SELECT * FROM tblname WHERE status LIKE '%aaa%' or status = 'd"あ#d'
?>

mysql_real_escape_string
SQL文中で用いる文字列の特殊文字をエスケープする

unknown

string mysql_real_escape_string ( string $エスケープされる文字列[, resource 接続ID ] )

エスケープされる文字列に含まれる特殊文字をエスケープし、mysql_query()関数で安全に利用できる形式に変換します。 成功した場合にエスケープ後の文字列、失敗した場合にFALSEを返します。

この関数は、\x00\n\r'"\x1aの先頭にバックスラッシュを付加します(%_はエスケープされません)

データの安全性確保のため、常にこの関数を使用してSQL文をエスケープしてからMySQLへクエリ送信して下さい。 SQL文中にバイナリデータが含まれる場合は必ずこの関数を使用してエスケープしなければなりません。

<?
$sql=sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
     mysql_real_escape_string($user),
     mysql_real_escape_string($password)
);
?>

オプションの第1引数接続IDが指定されていない場合は、mysql_connect()関数により直近に開かれた接続が使用されます。 接続が確立されていない場合は、引数を指定せずmysql_connect()関数がコールされた時と同様に接続を確立します。 それでも接続が確立できない場合は、E_WARNINGレベルのエラーが発生します。

<?
/* クウォート用のユーザー定義関数 */
function quote_smart($var){
    /* magic_quotesが有効ならクォートされた文字列のクウォート部分を除去 */
    if(get_magic_quotes_gpc()){
        $var=stripslashes($var);
    }
    /* 数値あるいは数値形式の文字列以外をクウォート */
    if(!is_numeric($var)){
        $var="'".mysql_real_escape_string($val)."'";
    }
    return $var;
}

$dbc=mysql_connect("localhost""root""") or die("MySQL接続失敗: ".mysql_error());
$db_select=mysql_select_db("db_customer") or die("データベース選択失敗: ".mysql_error());
/* userとpasswordはフォームからPOST送信されてきた値とする
   安全性を確保するためにこれらの値をクウォートする */
user=quote_smart($HTTP_POST_VARS['user']);
$password=quote_smart($HTTP_POST_VARS['password']);
/* SQL文をエスケープし、安全なクエリを生成 */
$sql=sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",$user,$password);
/* クエリ送信 */
$res=mysql_query($sql,$dbc) or ("クエリ失敗: ".mysql_error());
while($dat=mysql_fetch_array($res)){
    /* 処理 */
}
?>

関連コンテンツ

Q. このサイトの情報はお役に立ちましたでしょうか?

投票する 投票結果を見る

管理人に【web拍手】を送るweb拍手(1行メッセージも送れます♪)

pagetop