繁体   English   中英

php,如何以类的形式连接到数据库,发送sql语句并返回结果

[英]php, how to connect to a database as a class, send sql statments and return the result

如果问题有点奇怪,请原谅我
我可以澄清是否需要:

我有可以正常连接到mysql数据库的代码,但是我将其封装为一个类:

<?php
define("HOST", "127.0.0.1");     // The host you want to connect to.
define("USER", "phpuser");    // The database username.
define("PASSWORD", "Secretpassword");    // The database password.

class DBConnection{

    function conn($sql, $database){
        $DB = new mysqli(HOST,USER,PASSWORD,$database);
        if ($DB->connect_error){
            die("Connection failed: " . $DB->connect_error);
            exit();
        }

        if ($result = $DB->query($sql)){
            return TRUE;
            $DB->close();
         } 
         else{            
             echo "Error: " . $sql . "<br>" . $DB->error;            
             $DB->close();
         }
    }
}
?>

我已经用这种方式完成了操作,因此我可以在任何后续的php页面中包含此类,并允许他们向其发送sql语句和数据库,请参见以下示例:

$sql = ("INSERT INTO  users (first_name, last_name, username, email, password, group_level) VALUES ('John', 'Doah','JDoah', 'example@email', 'password', 'user')");

        $DB = new DBConnection;
        $result = $DB->conn($sql,"members");

        if ($result ==TRUE){
            return "Record added sucessfully";
        }

这很好。 但是,即时通讯希望将其他SQL语句发送到DBConnection。

我该怎么做,并让它传回它收到的任何结果? 错误,布尔值,行数据等。调用者将担心对其进行解析。

希望这是有道理的。

这是我在mysql仍然可以使用的时候使用的旧类,但是需要针对mysqli或更新的版本进行更新

class DBManager{
    private $credentials = array(
        "host" => "localhost",
        "user" => "",
        "pass" => "",
        "db" => ""
    );

    function DBManager(){
        $this->ConnectToDBServer();
    }

    function ConnectToDBServer(){
        mysql_connect($this->credentials["host"],$this->credentials["user"],$this->credentials["pass"]) or die(mysql_error());
        $this->ConnectToDB();
        session_start();
    }

    function ConnectToDB(){
        mysql_select_db($this->credentials["db"]) or die(mysql_error());
    }

    function Insert($tableName,$data){
        $parameters = '';

        $len = count($data);
        $i = 0;
        foreach($data as $key => $value){
            if(++$i === $len){
                $parameters .= $key . "='$value'";
            }else{
                $parameters .= $key . "='$value'" . ", ";
            }
        }

        $query = "INSERT INTO $tableName SET $parameters";

        mysql_query($query) or die(mysql_error());
        return true;
    }

    function GetRow($tableName,$select,$where){
        $selection = '';

        $len = count($select);
        $i = 0;
        foreach($select as $key){
            if(++$i === $len){
                $selection .= $key;
            }else{
                $selection .= $key . ",";
            }
        }

        $whereAt = '';

        foreach($where as $key => $value){
            $whereAt .= $key . "='$value'";
        }

        $query = "SELECT $selection FROM $tableName WHERE $whereAt";
        $result = mysql_query($query);

        while($row = mysql_fetch_array($result)){
            return $row;
        }
    }
}

这里的关键是您可以创建与数据库的持久连接,而无需重写大量代码

global $DB;
$DB = new DBManager();

由于连接发生在构造函数中,因此您现在将在该代码调用页面上建立连接,并可以通过使用$DB->GetRow()$DB->Insert()开始获取并设置数据库。容易得多,并且是根据$wpdb实例建模的,该实例是在wordpress网站中管理数据库的类

例子

对于这些示例,我们假设您有一个这样的表 在此处输入图片说明

插入新学生

//create an associative array
$data = array(
  "student_id" => 1,
  "birth_date" => "02/06/1992",
  "grade_level" => 4
);

//Send Call

$dm->Insert("student",$data);

获取数据

//Create selection
$selection = array("grade_level");

//Create associative array for where we want to find the data at
$where = array(
"id" => 1
);

//Get Result
$result = $dm->GetRow("student",$selection,$where);

//do something with result
echo $result->grade_level;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM