백엔드 개발 PHP 튜토리얼 일반적인 PHP 데이터베이스 분석 및 소개 Solutions_php 기술

일반적인 PHP 데이터베이스 분석 및 소개 Solutions_php 기술

May 16, 2016 pm 08:07 PM

PHP를 사용하여 데이터베이스에 연결할 때 많은 문제에 직면하게 됩니다. 이 기사에서는 데이터베이스 스키마 설계, 데이터베이스 액세스 및 데이터베이스를 사용하는 비즈니스 로직 코드를 포함하여 PHP 애플리케이션에서 발생하는 일반적인 데이터베이스 문제와 해당 솔루션을 설명합니다. 데이터베이스를 사용하는 방법이 하나만 올바른 경우.

PHP 데이터베이스 문제: MySQL을 직접 사용

일반적인 문제는 이전 PHP 코드가 mysql_ 함수를 직접 사용하여 데이터베이스에 액세스한다는 것입니다. 목록 1은 데이터베이스에 직접 액세스하는 방법을 보여줍니다.

목록 1. 접속/get.php

1

2

3

4

5

6

7

8

9

10

11

<?php 

function get_user_id( $name

$db = mysql_connect( 'localhost', 'root', 'password' ); 

mysql_select_db( 'users' ); 

$res = mysql_query( "SELECT id FROM users WHERE login='".$name."'" ); 

while( $row = mysql_fetch_array( $res ) ) { $id = $row[0]; } 

return $id

var_dump( get_user_id( 'jack' ) ); 

?>

로그인 후 복사

mysql_connect 함수는 데이터베이스에 액세스하는 데 사용됩니다. 또한 문자열 연결을 사용하여 $name 매개 변수를 쿼리에 추가하는 쿼리에 유의하세요. 이 기술에 대한 두 가지 좋은 대안이 있습니다. PEAR DB 모듈과 PDO(PHP Data Objects) 클래스입니다. 둘 다 특정 데이터베이스 선택의 추상화를 제공합니다. 따라서 IBM® DB2®, MySQL, PostgreSQL 또는 연결하려는 기타 데이터베이스를 크게 조정하지 않고도 코드를 실행할 수 있습니다. PEAR DB 모듈과 PDO 추상화 계층을 사용하는 또 다른 가치는 SQL 문에서 ? 연산자를 사용할 수 있다는 것입니다. 이렇게 하면 SQL을 유지 관리하기가 더 쉬워지고 SQL 삽입 공격으로부터 애플리케이션을 보호할 수 있습니다.

목록 2. 접속/get_good.php

1

2

3

4

5

6

7

8

9

10

11

12

13

14

<?php 

require_once("DB.php"); 

function get_user_id( $name

$dsn = 'mysql://root:password@localhost/users'

$db =& DB::Connect( $dsn, array() ); 

if (PEAR::isError($db)) { die($db->getMessage()); } 

$res = $db->query( 'SELECT id FROM users WHERE login=?',array( $name ) ); 

$id = null; 

while( $res->fetchInto( $row ) ) { $id = $row[0]; } 

return $id

var_dump( get_user_id( 'jack' ) ); 

?>

로그인 후 복사

$dsn의 데이터베이스 연결 문자열을 제외하고 MySQL의 직접적인 사용은 모두 제거되었습니다. 또한 ? 연산자를 통해 SQL에서 $name 변수를 사용합니다. 그런 다음 쿼리 데이터는 query() 메서드 끝에 있는 배열을 통해 전송됩니다.

PHP 데이터베이스 문제: 자동 증가 기능이 사용되지 않습니다

대부분의 최신 데이터베이스와 마찬가지로 MySQL에는 레코드별로 자동 증가하는 고유 식별자를 생성하는 기능이 있습니다. 그 외에도 먼저 SELECT 문을 실행하여 가장 큰 ID를 찾은 다음 해당 ID를 1씩 증가시키고 새 레코드를 찾는 코드를 볼 수 있습니다. Listing 3에서는 잘못된 패턴의 예를 보여줍니다.

목록 3. Badid.sql

1

2

3

4

5

6

7

8

9

DROP TABLE IF EXISTS users; 

CREATE TABLE users ( 

id MEDIUMINT, 

login TEXT, 

password TEXT 

); 

INSERT INTO users VALUES ( 1, 'jack', 'pass' ); 

INSERT INTO users VALUES ( 2, 'joan', 'pass' ); 

INSERT INTO users VALUES ( 1, 'jane', 'pass' );

로그인 후 복사

여기서 id 필드는 단순히 정수로 지정됩니다. 따라서 고유해야 하더라도 CREATE 문 다음에 오는 여러 INSERT 문에 표시된 대로 값을 추가할 수 있습니다. 목록 4에서는 이러한 유형의 패턴에 사용자를 추가하는 PHP 코드를 보여줍니다.

목록 4. Add_user.php

add_user.php의 코드는 먼저 id의 최대값을 찾는 쿼리를 수행합니다. 그런 다음 파일은 id 값을 1씩 증가시켜 INSERT 문을 실행합니다. 이 코드는 과부하가 걸린 서버의 경쟁 조건으로 인해 실패합니다. 게다가 비효율적이기도 합니다. 그렇다면 대안은 무엇입니까? MySQL의 자동 증가 기능을 사용하여 각 삽입에 대한 고유 ID를 자동으로 생성하십시오.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

<?php 

require_once("DB.php"); 

function add_user( $name, $pass

$rows = array(); 

$dsn = 'mysql://root:password@localhost/bad_badid'

$db =& DB::Connect( $dsn, array() ); 

if (PEAR::isError($db)) { die($db->getMessage()); } 

$res = $db->query( "SELECT max(id) FROM users" ); 

$id = null; 

while( $res->fetchInto( $row ) ) { $id = $row[0]; } 

$id += 1; 

$sth = $db->prepare( "INSERT INTO users VALUES(?,?,?)" ); 

$db->execute( $sth, array( $id, $name, $pass ) ); 

return $id

$id = add_user( 'jerry', 'pass' ); 

var_dump( $id ); 

?>

로그인 후 복사

이 글의 소개를 통해 PHP 데이터베이스 솔루션에 대한 이해를 높이는 데 도움이 되기를 바랍니다.

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

11 최고의 PHP URL 쇼트너 스크립트 (무료 및 프리미엄) 11 최고의 PHP URL 쇼트너 스크립트 (무료 및 프리미엄) Mar 03, 2025 am 10:49 AM

11 최고의 PHP URL 쇼트너 스크립트 (무료 및 프리미엄)

Laravel의 플래시 세션 데이터로 작업합니다 Laravel의 플래시 세션 데이터로 작업합니다 Mar 12, 2025 pm 05:08 PM

Laravel의 플래시 세션 데이터로 작업합니다

Laravel 테스트에서 단순화 된 HTTP 응답 조롱 Laravel 테스트에서 단순화 된 HTTP 응답 조롱 Mar 12, 2025 pm 05:09 PM

Laravel 테스트에서 단순화 된 HTTP 응답 조롱

Laravel Back End : Part 2, React가있는 React 앱 구축 Laravel Back End : Part 2, React가있는 React 앱 구축 Mar 04, 2025 am 09:33 AM

Laravel Back End : Part 2, React가있는 React 앱 구축

PHP의 컬 : REST API에서 PHP Curl Extension 사용 방법 PHP의 컬 : REST API에서 PHP Curl Extension 사용 방법 Mar 14, 2025 am 11:42 AM

PHP의 컬 : REST API에서 PHP Curl Extension 사용 방법

Codecanyon에서 12 개의 최고의 PHP 채팅 스크립트 Codecanyon에서 12 개의 최고의 PHP 채팅 스크립트 Mar 13, 2025 pm 12:08 PM

Codecanyon에서 12 개의 최고의 PHP 채팅 스크립트

Instagram API 소개 Instagram API 소개 Mar 02, 2025 am 09:32 AM

Instagram API 소개

라 라벨에서 알림 라 라벨에서 알림 Mar 04, 2025 am 09:22 AM

라 라벨에서 알림

See all articles