PHP에서는 mysql_query() 함수를 사용해 SQL UPDATE 명령을 실행할 수 있으며, WHERE 절을 함께 사용하거나 생략할 수도 있습니다. 이 함수는 mysql> 프롬프트에서 SQL 명령을 직접 실행하는 것과 동일한 방식으로 동작합니다. 다음 예제를 통해 기존 MySQL 테이블의 데이터를 업데이트하는 과정을 살펴보겠습니다.
예제
아래 스크립트는 tutorial_id가 3인 레코드의 tutorial_title 필드를 업데이트하는 PHP 코드입니다.
<?php
$dbhost = 'localhost:3036';
$dbuser = 'root';
$dbpass = 'rootpassword';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn ) {
die('Could not connect: ' . mysql_error());
}
$sql = 'UPDATE tutorials_tbl SET tutorial_title="Learning JAVA" WHERE tutorial_id=3';
mysql_select_db('TUTORIALS');
$retval = mysql_query( $sql, $conn );
if(! $retval ) {
die('Could not update data: ' . mysql_error());
}
echo 'Updated data successfully';
mysql_close($conn);
?>
코드 단계별 설명
- 데이터베이스 연결:
mysql_connect()로 호스트, 사용자명, 비밀번호를 지정해 MySQL 서버에 접속합니다. 연결에 실패하면die()가 오류 메시지를 출력하고 스크립트를 종료합니다. - UPDATE 쿼리 작성:
tutorials_tbl테이블에서tutorial_id가 3인 행의tutorial_title값을 "Learning JAVA"로 변경하는 SQL 문을 준비합니다. - 데이터베이스 선택:
mysql_select_db()로 작업 대상인 'TUTORIALS' 데이터베이스를 선택합니다. - 쿼리 실행:
mysql_query()가 SQL 문을 실행하고 그 결과를 반환합니다. - 결과 처리: 실행에 실패하면 오류 메시지와 함께 종료되고, 성공하면 완료 메시지가 출력됩니다.
- 연결 종료:
mysql_close()로 데이터베이스 연결을 닫습니다.
주의: mysql_* 함수는 더 이상 사용되지 않습니다
mysql_query()를 비롯한 mysql_* 확장 함수는 PHP 5.5에서 지원이 중단(deprecated)되었고, PHP 7.0부터는 완전히 제거되었습니다. 따라서 최신 PHP 환경에서는 MySQLi 또는 PDO 확장을 사용해야 합니다. 위 예제와 동일한 작업을 MySQLi 절차적 방식으로 구현하면 다음과 같습니다.
<?php
$dbhost = 'localhost:3036';
$dbuser = 'root';
$dbpass = 'rootpassword';
$dbname = 'TUTORIALS';
$conn = mysqli_connect($dbhost, $dbuser, $dbpass, $dbname);
if(!$conn) {
die('Could not connect: ' . mysqli_connect_error());
}
$sql = 'UPDATE tutorials_tbl SET tutorial_title="Learning JAVA" WHERE tutorial_id=3';
if(!mysqli_query($conn, $sql)) {
die('Could not update data: ' . mysqli_error($conn));
}
echo 'Updated data successfully';
mysqli_close($conn);
?>
또한 사용자 입력값이 쿼리에 포함되는 경우 SQL 인젝션 공격을 방지하기 위해 반드시 준비된 문(prepared statement)과 매개변수 바인딩을 사용하는 것이 좋습니다.