mysqli .. prepare, bind_param
$conn = mysqli_connect("localhost", "test", "test", "test");
$conn->query("Create table test_model"."(year integer, model varchar(50), accel REAL)");
$stmt = $conn->prepare("insert into test_model
values(?,?,?)");
$stmt->bind_param("isd", $year, $model,
$accel);
prepare 의 사전적 의미를 생각한다면 쉽게 이해할 수 있다.
$stmt = $conn->prepare("insert into test_model values(?,?,?)");
쿼리를 이렇게 날리겠다. 라는 의미라고 생각해도 무방할 듯 하다.
$stmt->bind_param("isd", $year, $model, $accel);
여기서는 컬럼이 총 3개인데 파라메타 값이 4개가 들어가 있다.
첫 isd 를 제외하고는 나머지는 컬럼에 들어갈 값이라는 걸 쉽게 알 수 있다.
isd를 잘 살펴 보면 의외로 답은 쉽게 나온다.
i 의 경우는 integer 를 의미하고
s 의 경우는 문자(string)을 의미하고
d 의 경우는 double 형을 의미한다.
$year, $model, $accel 의 순서로 입력이 되니 첫번쨰 파라메터 역시 isd로 써주면 된다.
추가적으로 b 옵션이 하나 있는데 이것은 blob 형으로 들어간다고 메뉴얼에.. ㅡ,,ㅡ
/*
$year = 2001;
$model = '156 2.0
Selespeed';
$accel = 8.6;
$stmt->execute();
$year= 2003;
$model = '147 2.0 Selespeed';
$accel =
9.3;
$stmt->execute();
$year = 2004;
$model = '156 GTA Sportwagon';
$accel =
6.3;
$stmt->execute();
*/
마지막으로 위 주석으로 된 코드에 주석을 없애고 실행을 하면 디비에 잘 들어가 있는 것을
확인할 수 있다.
디비에서 가져올 경우는
$conn = mysqli_connect("localhost", "test", "test", "test");
$stmt = $conn->prepare("select * from test_model order by
year");
$stmt->execute();
$stmt->bind_result($year, $model, $accel);
echo "<table>\n";
echo
"<tr><th>model</th><th>0-100
km/h</th></tr>\n";
while($stmt->fetch()){
echo
"<tr><td>$year $model</td><td>{$accel}
sec</td>\n";
}
echo "</table>\n";