>백엔드 개발 >PHP 튜토리얼 >PHP의 mysql 데이터베이스 작업 클래스 분석 예

PHP의 mysql 데이터베이스 작업 클래스 분석 예

黄舟
黄舟원래의
2017-08-07 09:25:301353검색

이 기사에서 설명하는 코드는 비교적 간단한 데이터베이스 캡슐화 클래스에 속하므로 초보자에게 더 적합합니다. 필요한 친구는 참조할 수 있습니다.

그럼 전반적인 아이디어에 대해 조금 이야기해 보겠습니다. 전체 클래스의 캡슐화에는 데이터베이스에 연결하기 위한 개인 속성 $conn과 여러 운영 기능이 포함됩니다. $conn이 인스턴스화되면 생성자는 들어오는 매개변수를 처리하고 리소스 유형 연결 핸들을 반환합니다. 그러면 인스턴스화된 객체의 해당 메소드를 호출하여 데이터베이스를 추가, 삭제, 확인, 수정할 수 있습니다.

말을 덜하고 코드 표시:


<?php
/** 
*以下代码用于数据库操作类的封装
* 
* @author rex<rex.sp.li@aliyun.com> 
* @version 1.0
* @since 2015
*/
class Mysql{
//数据库连接返回值
private $conn;
/**
* [构造函数,返回值给$conn]
* @param [string] $hostname [主机名]
* @param [string] $username[用户名]
* @param [string] $password[密码]
* @param [string] $dbname[数据库名]
* @param [string] $charset[字符集]
* @return [null]
*/
function __construct($hostname,$username,$password,$dbname,$charset=&#39;utf8&#39;){
  $conn = @mysql_connect($hostname,$username,$password);
  if(!$conn){
    echo &#39;连接失败,请联系管理员&#39;;
    exit;
  }
  $this->conn = $conn;
  $res = mysql_select_db($dbname);
  if(!$res){
  echo &#39;连接失败,请联系管理员&#39;;
  exit;
  }
  mysql_set_charset($charset);
}
function __destruct(){
  mysql_close();
}
/**
* [getAll 获取所有信息]
* @param [string] $sql [sql语句]
* @return [array] [返回二维数组]
*/
function getAll($sql){
  $result = mysql_query($sql,$this->conn);
  $data = array();
  if($result && mysql_num_rows($result)>0){
    while($row = mysql_fetch_assoc($result)){
    $data[] = $row;
    }
  }
  return $data;
}
/**
* [getOne 获取单条数据]
* @param [string] $sql [sql语句]
* @return [array] [返回一维数组]
*/
function getOne($sql){
  $result = mysql_query($sql,$this->conn);
  $data = array();
  if($result && mysql_num_rows($result)>0){
    $data = mysql_fetch_assoc($result);
  }
  return $data;
}

/**
* [getOne 获取单条数据]
* @param [string] $table [表名]
* @param [string] $data [由字段名当键,属性当键值的一维数组]
* @return [type] [返回false或者插入数据的id]
*/

function insert($table,$data){
  $str = &#39;&#39;;
  $str .="INSERT INTO `$table` ";
  $str .="(`".implode("`,`",array_keys($data))."`) "; 
  $str .=" VALUES ";
  $str .= "(&#39;".implode("&#39;,&#39;",$data)."&#39;)";
  $res = mysql_query($str,$this->conn);
  if($res && mysql_affected_rows()>0){
      return mysql_insert_id();
  }else{
    return false;
  }
}
/**
* [update 更新数据库]
* @param [string] $table [表名]
* @param [array] $data [更新的数据,由字段名当键,属性当键值的一维数组]
* @param [string] $where [条件,‘字段名&#39;=‘字段属性&#39;]
* @return [type] [更新成功返回影响的行数,更新失败返回false]
*/
function update($table,$data,$where){
  $sql = &#39;UPDATE &#39;.$table.&#39; SET &#39;;
  foreach($data as $key => $value){
  $sql .= "`{$key}`=&#39;{$value}&#39;,";
  }
  $sql = rtrim($sql,&#39;,&#39;);
  $sql .= " WHERE $where";
  $res = mysql_query($sql,$this->conn);
  if($res && mysql_affected_rows()){
    return mysql_affected_rows();
  }else{
  return false;
  }
}

/**
* [delete 删除数据]
* @param [string] $table [表名]
* @param [string] $where [条件,‘字段名&#39;=‘字段属性&#39;]
* @return [type] [成功返回影响的行数,失败返回false]
*/
function del($table,$where){
  $sql = "DELETE FROM `{$table}` WHERE {$where}";
  $res = mysql_query($sql,$this->conn);
  if($res && mysql_affected_rows()){
    return mysql_affected_rows();
  }else{
  return false;
  }
}
}

인스턴트 클래스:


<?php

//包含数据库操作类文件
include &#39;mysql.class.php&#39;;

//设置传入参数
$hostname=&#39;localhost&#39;;
$username=&#39;root&#39;;
$password=&#39;123456&#39;;
$dbname=&#39;aisi&#39;;
$charset = &#39;utf8&#39;;

//实例化对象

$db = new Mysql($hostname,$username,$password,$dbname);

//获取一条数据

$sql = "SELECT count(as_article_id) as count FROM as_article where as_article_type_id=1";
$count = $db->getOne($sql);

//获取多条数据

$sql = "SELECT * FROM as_article where as_article_type_id=1 order by as_article_addtime desc limit $start,$limit";
$service = $db->getAll($sql);

//插入数据

$arr = array(
&#39;as_article_title&#39;=>&#39;数据库操作类&#39;,
&#39;as_article_author&#39;=>&#39;rex&#39;,
);
$res = $db->insert(&#39;as_article&#39;,$arr);

//更新数据

$arr = array(
&#39;as_article_title&#39;=>&#39;实例化对象&#39;,
&#39;as_article_author&#39;=>&#39;Lee&#39;,
);
$where = "as_article_id=1";
$res = $db->update(&#39;as_article&#39;,$arr,$where);

//删除数据

$where = "as_article_id=1";
$res = $db->del(&#39;as_article&#39;,$where);

?>

코드를 시연한 후 몇 마디 말해보세요.

 getOne 메소드는 $sql의 sql 문을 전달하여 단일 데이터 조각을 쿼리하고 1차원 배열을 반환합니다. getAll 메서드도 sql 문을 전달하여 여러 데이터 조각을 쿼리하고 2차원 배열을 반환합니다. ; insert 메소드는 테이블 이름과 연관 배열을 전달하고, 삽입된 데이터에 해당하는 bolen 유형 또는 인덱스를 반환하며, update 메소드는 테이블 이름, 관련 배열 및 조건을 전달하고 bolen 또는 영향을 받은 행 수를 반환합니다. del 메소드는 테이블 이름과 조건을 전달하고 부울 유형을 반환합니다.

 그게 전부지만 전부는 아닙니다. 관심 있는 친구는 getOne 및 getAll을 SQL 문에 매개변수로 직접 전달하여 최적화할 수 있습니다.

위 내용은 PHP의 mysql 데이터베이스 작업 클래스 분석 예의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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