首页 > 解决方案 > php,如何作为类连接数据库,发送sql语句并返回结果

问题描述

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

我有可以正常连接到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。

我该如何做到这一点并让它传回它收到的任何结果?错误、布尔值、行数据等。调用者会担心解析它。

希望这是有道理的。

标签: phpmysqli

解决方案


这是我在 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()数据库wordpress 网站中的数据库$DB->Insert()$wpdb

例子

对于这些示例,我们将假设您有一个这样的表 在此处输入图像描述

插入新学生

//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;

推荐阅读