다섯 가지 일반적인 PHP 데이터베이스 문제 (1)_PHP 튜토리얼

WBOY
풀어 주다: 2016-07-22 09:02:30
원래의
827명이 탐색했습니다.

데이터베이스를 사용하는 방법 중 하나만 맞다면 데이터베이스 설계, 데이터베이스 액세스 및 데이터베이스 기반 PHP 비즈니스 로직 코드를 생성할 수 있는 방법은 여러 가지가 있습니다. 그러나 그것은 대개 잘못된 것으로 끝난다. 이 문서에서는 데이터베이스 설계 및 데이터베이스에 액세스하는 PHP 코드에서 발생하는 다섯 가지 일반적인 문제와 이러한 문제가 발생할 때 이를 해결하는 방법에 대해 설명합니다.

문제 1: MySQL을 직접 사용

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

목록 1. Access/get.php

<ol class="dp-c"><li class="alt"><span><span><?php  </span></span></li><li><span class="keyword">function</span><span> get_user_id( </span><span class="vars">$name</span><span> )  </span></li><li class="alt"><span>{  </span></li><li><span>  </span><span class="vars">$db</span><span> = mysql_connect( </span><span class="string">'localhost'</span><span>, </span><span class="string">'root'</span><span>, </span><span class="string">'password'</span><span> );  </span></li><li class="alt"><span>  mysql_select_db( </span><span class="string">'users'</span><span> );  </span></li><li><span> </span></li><li class="alt"><span>  </span><span class="vars">$res</span><span> = mysql_query( </span><span class="string">"SELECT id FROM users WHERE login='"</span><span>.</span><span class="vars">$name</span><span>.</span><span class="string">"'"</span><span> );  </span></li><li><span>  </span><span class="keyword">while</span><span>( </span><span class="vars">$row</span><span> = mysql_fetch_array( </span><span class="vars">$res</span><span> ) ) { </span><span class="vars">$id</span><span> = </span><span class="vars">$row</span><span>[0]; }  </span></li><li class="alt"><span> </span></li><li><span>  </span><span class="keyword">return</span><span> </span><span class="vars">$id</span><span>;  </span></li><li class="alt"><span>}  </span></li><li><span> </span></li><li class="alt"><span>var_dump( get_user_id( </span><span class="string">'jack'</span><span> ) );  </span></li><li><span>?> </span></span></li></ol>
로그인 후 복사

mysql_connect 함수는 데이터베이스에 액세스하는 데 사용됩니다. 또한 문자열 연결을 사용하여 $name 매개 변수를 쿼리에 추가하는 쿼리에 유의하세요.

이 기술에 대한 두 가지 좋은 대안이 있습니다. PEAR DB 모듈과 PDO(PHP Data Objects) 클래스입니다. 둘 다 특정 데이터베이스 선택의 추상화를 제공합니다. 결과적으로 IBM® DB2®, MySQL, PostgreSQL 또는 연결하려는 기타 데이터베이스를 크게 조정하지 않고도 코드를 실행할 수 있습니다.

PEAR DB 모듈과 PDO 추상화 계층을 사용하는 또 다른 가치는 SQL 문에서 ? 연산자를 사용할 수 있다는 것입니다. 이렇게 하면 SQL을 유지 관리하기가 더 쉬워지고 SQL 삽입 공격으로부터 애플리케이션을 보호할 수 있습니다.

PEAR DB를 이용한 대체 코드는 아래와 같습니다.

목록 2. Access/get_good.php

<ol class="dp-c">
<span><span> </span></span><li><span><?php  </span></li><li class="alt"><span class="keyword">require_once</span><span>(</span><span class="string">"DB.php"</span><span>);  </span></li><li><span> </span></li><li class="alt"><span class="keyword">function</span><span> get_user_id( </span><span class="vars">$name</span><span> )  </span></li><li><span>{  </span></li><li class="alt"><span>  </span><span class="vars">$dsn</span><span> = </span><span class="string">'mysql://root:password@localhost/users'</span><span>;  </span></li><li><span>  </span><span class="vars">$db</span><span> =& DB::Connect( </span><span class="vars">$dsn</span><span>, </span><span class="keyword">array</span><span>() );  </span></li><li class="alt"><span>  </span><span class="keyword">if</span><span> (PEAR::isError(</span><span class="vars">$db</span><span>)) { </span><span class="keyword">die</span><span>(</span><span class="vars">$db</span><span>->getMessage()); }  </span></li>
<li><span> </span></li>
<li class="alt">
<span>  </span><span class="vars">$res</span><span> = </span><span class="vars">$db</span><span>->query( </span><span class="string">'SELECT id FROM users WHERE login=?'</span><span>,  </span>
</li>
<li>
<span>  </span><span class="keyword">array</span><span>( </span><span class="vars">$name</span><span> ) );  </span>
</li>
<li class="alt">
<span>  </span><span class="vars">$id</span><span> = null;  </span>
</li>
<li>
<span>  </span><span class="keyword">while</span><span>( </span><span class="vars">$res</span><span>->fetchInto( </span><span class="vars">$row</span><span> ) ) { </span><span class="vars">$id</span><span> = </span><span class="vars">$row</span><span>[0]; }  </span>
</li>
<li class="alt"><span> </span></li>
<li>
<span>  </span><span class="keyword">return</span><span> </span><span class="vars">$id</span><span>;  </span>
</li>
<li class="alt"><span>}  </span></li>
<li><span> </span></li>
<li class="alt">
<span>var_dump( get_user_id( </span><span class="string">'jack'</span><span> ) );  </span>
</li>
<li><span>?> </span></li>
</ol>
로그인 후 복사

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

1

www.bkjia.comhttp: //www.bkjia.com/PHPjc/445827.htmlTechArticle데이터베이스를 사용하는 방법이 하나만 옳다면 데이터베이스 디자인, 데이터베이스 액세스 및 데이터베이스를 만드는 방법은 여러 가지가 있습니다. 데이터베이스 기반의 PHP 비즈니스 로직 코드이지만 결국 일반적으로...
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿