php - 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。
我该如何做到这一点并让它传回它收到的任何结果?错误、布尔值、行数据等。调用者会担心解析它。
希望这是有道理的。
解决方案
这是我在 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;
推荐阅读
- python - FFT Scipy 计算频率
- salesforce - 在 SalesForce 中获取 Connected App 的 refresh_token
- flutter - Column中的ListView产生异常的上边距
- php - 为什么我无法使用 laravel 查询生成器执行此更新?
- android - 如何在android中计算后退按钮宽度、工具栏标题宽度和菜单项宽度?
- vue.js - Vue 2 中的动态组件和条件渲染
- python - python 3 fabric 2返回控制字符
- javascript - 组件异常:未定义不是对象(正在评估“item [0].items.created”)
- r - 如何计算R中特定列的总和并将结果放在另一列中
- ios - 我无法在 Facebook 开发者帐户中添加 Audience Network