mysqliでプリペアドステートメント

MySQL

POSTやGETで渡されたデータをinsertする際、プリペアドステートメント方式で行うことでエンコードせずにinsertすることが出来る。

 

<?php

$host = "localhost";
$username = "******";
$password = "******";
$dbname = "******";

$mysqli = new mysqli($host, $username, $password, $dbname);
$mysqli->set_charset("utf8");

if ($mysqli->connect_error) {
	error_log($mysqli->connect_error);
	exit;
}


/*****************************************************/


$auto_increment = 0;
$id = "takahito";
$name = "隆仁";
$exp = "あいうえお\nかきくけこ\nさしすせそ\nたちつてと";
$date = date("Y-m-d H:i:s");


// SQL文の作成
$stmt = $mysqli->prepare("INSERT INTO member (
	member_no, member_id, member_name, member_exp, member_date
) VALUES (
	?, ?, ?, ?, ?
)");

// パラメータを設定
$stmt->bind_param( 'issss', $auto_increment, $id, $exp, $exp, $date);


// プリペアドステートメント実行
$res = $stmt->execute();


// 連番を取得@closeメソッドの前
$auto_increment = $stmt->insert_id;


//ステートメントを閉じる
$stmt->close();


$query = "SELECT * FROM member";
$result = $mysqli->query($query);
$row_cnt = $result->num_rows;
if($row_cnt != 0){
$i=0;
while ($row = $result->fetch_assoc()) {
	$i++;
	$data .= "<p>".$row["member_no"]." ".$row["member_id"]." ".$row["member_name"]." ".$row["member_exp"]." ".$row["member_date"]."</p>";
}
}

//接続を閉じる
$mysqli->close();

?>

 

型は大きく4タイプ。整数型(Integer)の「i」、浮動小数点型(Double)の「d」、文字列(String)の「s」、バイナリデータ(Blob)の「b」のいずれかを指定。日付や時間などは文字列の「s」でOK。

コメント

タイトルとURLをコピーしました