Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

PHP 스크립트로 기존 MySQL 테이블을 업데이트하는 방법

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);
?>

코드 단계별 설명

  1. 데이터베이스 연결: mysql_connect()로 호스트, 사용자명, 비밀번호를 지정해 MySQL 서버에 접속합니다. 연결에 실패하면 die()가 오류 메시지를 출력하고 스크립트를 종료합니다.
  2. UPDATE 쿼리 작성: tutorials_tbl 테이블에서 tutorial_id가 3인 행의 tutorial_title 값을 "Learning JAVA"로 변경하는 SQL 문을 준비합니다.
  3. 데이터베이스 선택: mysql_select_db()로 작업 대상인 'TUTORIALS' 데이터베이스를 선택합니다.
  4. 쿼리 실행: mysql_query()가 SQL 문을 실행하고 그 결과를 반환합니다.
  5. 결과 처리: 실행에 실패하면 오류 메시지와 함께 종료되고, 성공하면 완료 메시지가 출력됩니다.
  6. 연결 종료: 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)과 매개변수 바인딩을 사용하는 것이 좋습니다.