Programming/PHP

PHP MY-SQL 데이타베이스 연결 소스 코드 예제 및 데이타베이스 연결 에러 로그 정리

zzarungna 2021. 6. 4. 23:19
반응형

PHP MY-SQL 데이타베이스 연결 소스 코드 예제 및 데이타베이스 연결 에러 로그 정리

PHP와 MY SQL에 접속하고 쿼리를 실행하기 위해 필요한 PHP 소스 코드와 데이터베이스 연결 시 발생할 수 있는 에러 로그에 대한 내용에 대해서 간단히 정리해 보려고 합니다.

 

소스(PHP, MY-SQL 연결, 쿼리실행, 쿼리결과 확인 소스 코드)

 

소스 코드의 내용의 대부분은 기본적으로 검색하면 쉽게 찾아볼 수 있는 코드들입니다. PHP와 MY-SQL 버전에 따라 사용 방법에 대한 조금의 차이점과 INSERT, UPDATE, DELETE 그리고 SELECT 쿼리 실행 결과를 확인할 때 구분하기 위한 소스로 활용하면 좋을 것 같습니다.

<?php
/*  PHP / DB 연결 관련 내용 정리 PHP 5.0 MySQL 4.1.3 이상
 *  PHP 5.0 MySQL 4.1.3 이하 버전은 mysqli에서 i를 빼고 사용
 *  mysql_connect
 *  mysqli_query($connect, $query)의 경우는 쿼리와 DB코넥트 정보가 바뀌어 있으니 이부분은 참고하자.
 *  mysql_fetch_array
 */

    $connect = mysqli_connect("호스트", "데이타베이스 계정", "데이타베이스 비밀번호", "데이타베이스 이름"); //DB 연결
    
    //DB 연결시 문제가 생겼다면 에러로그 확인해 보기.
    if(!$connect){
        die("DB 연결 실패 로그를 확인해 보세요 : " . mysqli_connect_error());
    }else{
        echo('DB 연결 성공!<br>');
    }
    
    $webdata = '아이유홍길동';
    $change_query = "INSERT INTO test (data) VALUES('$webdata')"; //db쿼리문 작성    
    
    /* DB INSERT, UPDATE, DELETE 쿼리문.
     * $query = "INSERT INTO test (data) VALUES('$webdata')"; 
     * $query = "UPDATE test SET data = 449949494 WHERE data = 0"; 
     * $query = "DELETE FROM test WHERE data = 2021";
     */
    $change_result = mysqli_query($connect, $change_query);//DB UPDATE, INSERT, DELETE 쿼리 실행시 mysqli_query를 이용해 DB 연결 후 쿼리 실행
        
    //result1 변수에는 쿼리 실행 결과 정상적으로 쿼리가 실행되었다면 숫자1이 반환되며 쿼리문 작성이 잘못되었거나 문제가 있는 경우 에러를 내거나 반환값이 아예 없는 경우도 있으니 참고.
    if($change_result == 1){
        echo('쿼리 실행 성공');
    }else{
        echo('쿼리 실행 실패');
    }
    
    /*
     *DB SELECT 데이타베이스에 있는 내용을 가져올땐 mysqli_fetch_array 사용 데이터 로우가 한개이상인 경우는 while로 하나인 경우는 if로 DATA를 가져오면 좋다. 
     */ 
    
    //쿼리 결과가 데이터가 1개일때
    $one_query = "SELECT * FROM test WHERE data = 34";
    $one_result = mysqli_query($connect, $one_query);
    if($data = mysqli_fetch_array($one_result)){
        $outdata = $data['data'];
        echo($outdata);
    }
    
    //쿼리 결과가 없거나 1개만 존재하더라도 while을 사용해도 에러는 발생하지 않지만 소스 코드의 사용목적과 코드의 가독성을 높이는 목적을 위해서라도 결과가 1개인 경우는 if와 while을 구분하여 코드를 작성 하면 좋을 것 같다.
    $all_query = "SELECT * FROM test";
    $all_result = mysqli_query($connect, $all_query);
    while($data = mysqli_fetch_array($all_result)){
        $outdata = $data['data'];
        echo($outdata);
    }
    
    //UPDATE, INSERT, DELETE와 다르게 SELECT 쿼리 결과를 확인하려면 쿼리 실행결과 레코드 수를 카운트 하는 mysqli_num_rows를 활용해 DB SELECT 결과를 확인 하도록 한다.  
    if(mysqli_num_rows($all_result) >= 1 ){
        while($data = mysqli_fetch_array($all_result)){
            $outdata = $data['data'];
            echo("$outdata<br>");
        }
    }else{
        echo("SELECT 조회 결과가 없거나 쿼리문 오류 및 기타 문제가 생긴 경우.");
    }
    
    //DB 연결 종료 구문을 빠뜨리는 경우가 있는데 DB 연결에는 한계가 있기에 DB 연결이후에는 연결을 항상 해제해 주도록 하는 게 좋다.
    mysqli_close($conn);
?>

 

DB연결 실패 로그 - mysqli_connect() HY000/1044 Access denied for user to database

$connect = mysqli_connect("호스트", "데이타베이스 계정", "데이타베이스 비밀번호", "데이타베이스 이름");

작성했던 소스상 데이타베이스 이름이 잘못 기재된 경우 아래와 같이 에러 발생되니 데이타베이스 이름이 잘못 기재 되었는지 확인 하시면 좋을 것 같습니다.


 

DB연결 실패 로그 - mysqli_connect() HY000/1045 Access denied for user to using password: YES

$connect = mysqli_connect("호스트", "데이타베이스 계정", "데이타베이스 비밀번호", "데이타베이스 이름");

DB 연결시 데이타베이스 계정 또는 데이타베이스 비밀번호 입력이 잘못된 경우에 발생하는 에러로그이며 아이디가 틀렸는지 비밀번호가 틀렸는지 정확히 표시되지는 않습니다.

 

로그상 Access denied for user 다음에 아래 이미지와 같이 틀린 문자열 'zzarungna1'과 같이 아이디 또는 비밀번호로 입력했던 문자열이 표시되니 해당 문자열을 통해 ID가 틀렸는지 비밀번호가 틀렸는지 유추해 볼 수 있습니다.


 

DB연결 실패 로그 - php_network_getaddresses: getaddrinfo failed: Name or service not known

$connect = mysqli_connect("호스트", "데이타베이스 계정", "데이타베이스 비밀번호", "데이타베이스 이름");

소스 구문상 호스트가 정보가 맞지 않는 경우 아래와 같이 에러 로그가 표시 되니 DB를 접속하려는 호스트 정보를 확인후 수정 하시면 좋을 듯 합니다.


 

Catchable fatal error Object of class mysqli_result could not be converted to string

아래 이미지와 같이 발생하는 에러 로그는 여러 가지 상황에서 에러가 발생할 수 있습니다. 하지만 소스 구문 중 SELECT 쿼리 실행 결과를 확인하기 위해 mysqli_num_rows를 사용하지 않고 echo를 사용해 쿼리 실행 결과를 바로 출력하려고 했을 때 발생하기도 합니다.

 

 

만약 SELECT 쿼리에 대한 실행 결과를 확인 하실 때는 mysqli_num_rows 코드를 활용하시면 좋을 것 같습니다.

    $query = "SELECT * FROM test";
    $result = mysqli_query($connect, $query);
    
    echo(mysqli_num_rows($result));
    
    if(mysqli_num_rows($result) >= 1 ){
        while($data = mysqli_fetch_array($result)){
            $outdata = $data['data'];
            echo("$outdata<br>");
        }
    }

 

최근에 책을 읽으며 본 내용이 있는데 DB를 설계할 때 특정 데이터를 구분하기 위해 DB에 저장되는 데이터를 특정 알파벳이나 문자로 지정하면 좀 더 알아보기 편하겠다고 생각한 적이 있습니다. 책의 내용은 이랬습니다. 데이터베이스 저장 용량을 절약하게 되면 비용을 아낄 수 있다. 물론 규모가 크지 않다면 문제 될 게 없겠지만 데이터가 얼마나 늘어날지 비용이 얼마나 늘어날지 예측할 수 없으니 이 부분을 고려해 데이터를 구분하기 위한 데이터 저장의 경우는 숫자로 하는 것이 좋다는 얘기가 있었습니다.

 

다른 사람들이 개발해 놓은 사이트를 운영하다 보면 특정 데이터의 종류를 구분하기 위해 DB 데이터를 숫자로 저장해 프로그램 소스 코드 설계 문서에 관련 내용도 없는 경우가 많아 사이트를 일일이 확인하며 종류를 구분하는 데이터를 확인한 경우가 있었는데 데이터베이스 설계 시 종류를 구분하는 데이터는 사람이 알아볼 수 있는 숫자가 아닌 데이터로 저장하면 좋지 않을까? 라고 생각한 적이 있었는데 제 생각이 짧았던 것 같습니다.

 

PHP와 MY-SQL을 사용하시면서 발생할 수 있는 에러 로그와 PHP 소스 코드를 이용해 DB 접속 및 쿼리 실행 및 결과를 확인하는 내용에 대해 간단히 정리해 보았으니 필요하신 분들은 참고하시면 좋을 것 같습니다.

반응형