때때로 데이터베이스 연결에 관한 질문을 봅니다.
대부분의 대답은 내가하는 방식이 아니거나 정확하게 대답을 얻지 못할 수도 있습니다. 어쨌든; 내가하는 방식이 나를 위해 일하기 때문에 나는 그것에 대해 생각해 본 적이 없습니다.
그러나 여기에 미친 생각이 있습니다. 아마도 내가이 모든 일을 잘못하고있을 수도 있고, 만약 그렇다면; PHP와 PDO를 사용하여 MySQL 데이터베이스에 올바르게 연결하고 쉽게 액세스 할 수 있도록하는 방법을 알고 싶습니다.
내가하는 방법은 다음과 같습니다.
첫째, 여기 내 파일 구조이다 (옷을 벗었) :
public_html/
* index.php
* initialize/
-- load.initialize.php
-- configure.php
-- sessions.php
index.php
맨 위에는 require('initialize/load.initialize.php');
.
load.initialize.php
# site configurations
require('configure.php');
# connect to database
require('root/somewhere/connect.php'); // this file is placed outside of public_html for better security.
# include classes
foreach (glob('assets/classes/*.class.php') as $class_filename){
include($class_filename);
}
# include functions
foreach (glob('assets/functions/*.func.php') as $func_filename){
include($func_filename);
}
# handle sessions
require('sessions.php');
수업을 포함하는 더 낫거나 더 정확한 방법이 있다는 것을 알고 있지만 그것이 무엇인지 기억할 수 없습니다. 아직 조사 할 시간이 없었지만 autoload
. 그런 ...
configure.php
여기서는 기본적으로 일부 php.ini 속성을 재정의 하고 사이트에 대한 다른 전역 구성을 수행합니다.
connect.php
다른 클래스가 이것을 확장 할 수 있도록 클래스에 연결을 설정했습니다 .
class connect_pdo
{
protected $dbh;
public function __construct()
{
try {
$db_host = ' '; // hostname
$db_name = ' '; // databasename
$db_user = ' '; // username
$user_pw = ' '; // password
$con = new PDO('mysql:host='.$db_host.'; dbname='.$db_name, $db_user, $user_pw);
$con->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$con->exec("SET CHARACTER SET utf8"); // return all sql requests as UTF-8
}
catch (PDOException $err) {
echo "harmless error message if the connection fails";
$err->getMessage() . "<br/>";
file_put_contents('PDOErrors.txt',$err, FILE_APPEND); // write some details to an error-log outside public_html
die(); // terminate connection
}
}
public function dbh()
{
return $this->dbh;
}
}
# put database handler into a var for easier access
$con = new connect_pdo();
$con = $con->dbh();
//
최근에 OOP를 배우고 mysql 대신 PDO를 사용하기 시작한 이후로 엄청난 개선의 여지가 있다고 생각합니다.
그래서 저는 몇 가지 초보자 튜토리얼을 따라했고 다른 것들을 시도했습니다 ...
sessions.php
일반 세션을 처리하는 것 외에도 다음과 같이 일부 클래스를 세션으로 초기화합니다.
if (!isset($_SESSION['sqlQuery'])){
session_start();
$_SESSION['sqlQuery'] = new sqlQuery();
}
이런 식으로이 수업은 어디서나 사용할 수 있습니다. 이것은 좋은 습관이 아닐 수도 있습니다 (?) ...
어쨌든, 이것이이 접근 방식을 통해 어디에서나 할 수 있습니다.
echo $_SESSION['sqlQuery']->getAreaName('county',9); // outputs: Aust-Agder (the county name with that id in the database)
내 내부 sqlQuery
- 클래스 , extends
내 connect_pdo
- 클래스 , I라는 공용 함수가 getAreaName
내 데이터베이스에 대한 요청을 처리합니다.
꽤 깔끔한 것 같아요.
매력처럼 작동
합니다. 그래서 기본적으로 제가하는 방식입니다.
또한 클래스 내에서 DB에서 무언가를 가져와야 할 때마다 다음과 비슷한 작업을 수행합니다.
$id = 123;
$sql = 'SELECT whatever FROM MyTable WHERE id = :id';
$qry = $con->prepare($sql);
$qry -> bindParam(':id', $id, PDO::PARAM_INT);
$qry -> execute();
$get = $qry->fetch(PDO::FETCH_ASSOC);
connect_pdo.php 내부의 변수에 연결을 넣었으므로 참조 만했고 갈 수 있습니다. 효과가있다. 예상되는 결과를 얻습니다 ...
그러나 그것에 관계없이; 내가 여기서 멀리 떨어져 있는지 말해 주실 수 있다면 정말 감사하겠습니다. 대신해야 할 일, 개선을 위해 변경할 수 있거나 변경해야하는 영역 등 ...
배우고 싶어요 ...