WHERE 절로 조건부 데이터 조회하기
MySQL 테이블에서 특정 조건에 맞는 데이터만 가져오려면 SQL 문에 WHERE 절을 작성한 뒤, 이를 PHP 스크립트와 함께 실행하면 됩니다.
PHP 스크립트에서는 mysql_query() 함수로 SQL 명령을 실행하고, 이어서 mysql_fetch_array() 함수를 호출해 선택된 데이터를 한 행씩 가져올 수 있습니다. 이 함수는 각 행을 연관 배열, 숫자 인덱스 배열, 또는 두 형식을 모두 포함한 배열로 반환하며, 더 이상 가져올 행이 없으면 FALSE를 반환합니다.
예제
아래 예제는 tutorials_tbl 테이블에서 저자 이름이 Sanjay인 모든 레코드를 조회해 출력하는 PHP 스크립트입니다.
<?php
$dbhost = 'localhost:3036';
$dbuser = 'root';
$dbpass = 'rootpassword';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn ) {
die('Could not connect: ' . mysql_error());
}
$sql = 'SELECT tutorial_id, tutorial_title,
tutorial_author, submission_date
FROM tutorials_tbl
WHERE tutorial_author = "Sanjay"';
mysql_select_db('TUTORIALS');
$retval = mysql_query( $sql, $conn );
if(! $retval ) {
die('Could not get data: ' . mysql_error());
}
while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) {
echo "Tutorial ID :{$row['tutorial_id']} <br> ".
"Title: {$row['tutorial_title']} <br> ".
"Author: {$row['tutorial_author']} <br> ".
"Submission Date : {$row['submission_date']} <br> ".
"--------------------------------<br>";
}
echo "Fetched data successfully\n";
mysql_close($conn);
?>
참고: mysql_* 함수는 더 이상 사용되지 않습니다
위 예제에 사용된 mysql_connect(), mysql_query() 등 mysql_* 계열 함수는 PHP 5.5에서 지원이 중단(deprecated)되었고, PHP 7부터는 완전히 제거되었습니다. 따라서 실제 프로젝트에서는 MySQLi 확장이나 PDO를 사용해야 하며, SQL 인젝션 공격을 방지하려면 사용자 입력값을 준비된 문(prepared statement)으로 처리하는 것이 안전합니다.
아래는 동일한 기능을 MySQLi의 준비된 문으로 구현한 예제입니다.
<?php
$conn = mysqli_connect('localhost', 'root', 'rootpassword', 'TUTORIALS');
if(!$conn) {
die('Could not connect: ' . mysqli_connect_error());
}
$author = 'Sanjay';
$sql = 'SELECT tutorial_id, tutorial_title, tutorial_author, submission_date
FROM tutorials_tbl
WHERE tutorial_author = ?';
$stmt = mysqli_prepare($conn, $sql);
mysqli_stmt_bind_param($stmt, 's', $author);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);
while($row = mysqli_fetch_assoc($result)) {
echo "Tutorial ID : {$row['tutorial_id']} <br> ".
"Title: {$row['tutorial_title']} <br> ".
"Author: {$row['tutorial_author']} <br> ".
"Submission Date : {$row['submission_date']} <br> ".
"--------------------------------<br>";
}
echo "Fetched data successfully\n";
mysqli_close($conn);
?>
이처럼 WHERE 절과 PHP의 데이터베이스 함수를 조합하면 원하는 조건에 맞는 레코드만 효율적으로 조회할 수 있습니다.