使用方法:$database = new database_mysqli("localhost", "username", "password", "databasename");
//show full results - single query
$sql = "SHOW TABLES";
$tables = $database->query($sql);
//execute multiple queries
$sql = array ("SELECT * FROM blogs WHERE userId = 2", "SELECT * FROM comments WHERE userId = 2");
$results = $database->query($sql, "", true, true);
//execute query, dont care about results
$sql = "DELETE FROM blogs WHERE userID = 2";
$database->justquery($sql);
//show first row only
$sql = "SHOW TABLES";
$firstTable = $database->loadFirstRow($sql);
//show first element of first row only (useful for SELECT COUNT(*) statements)
$sql = "SELECT COUNT(*) FROM users AS U";
$total = $database->loadResult($sql);
$database->destroyConnection();
php代码:<?php
/**
* This is the MySQLi OOP database interface class
* @package Skyward_Landing_Page
* @subpackage Database Interface
* @filesource
* @author Matt Ford
* @version 2.0
*/
class database_mysqli {
/**
* database server hostname/IP
* @var string
*/
private $host = NULL;
/**
* SQL Server login username, encrypted for privacy
* @var string
*/
private $username = NULL;
/**
* SQL Server login password, encrypted for privacy
* @var string
*/
private $password = NULL;
/**
* name of database
* @var string
*/
public $databaseName = NULL;
/**
* SQL Server connection resource
* @var object
*/
public $link = NULL;
/**
* array of queries run against this object
* @var array
*/
public $queries = NULL;
/**
* any errors resulting from queries
* @var array
*/
public $errors = NULL;
public function __construct($host, $username, $password, $database) {
$this->host = $host;
$this->username = sha1($username);
$this->password = sha1($password);
$this->databaseName = $database;
$this->link = "";
$this->queries = array ();
$this->errors = array ();
$this->sqls = array ();
$this->link = @new mysqli($this->host, $username, $password);
if ($this->link->connect_error != null) {
die("Connect Error: " . $this->link->connect_error);
}
else {
if ($this->link->select_db($this->databaseName) === false) {
die("Cannot Select Table: " . $this->link->error);
} else {}
}
}
/**
* This method kills the MySQLi connection
* @access public
* @author Matt Ford
*/
public function destroyConnection() {
$this->link->kill($this->link->thread_id);
$this->link->close();
}
/**
* This method executes a query and returns the raw result resource
* @access public
* @author Matt Ford
* @param string $sql string query
* @return object raw SQL result resource
*/
public function justquery($sql) {
$this->queries[] = $sql;
return $this->link->query($sql);
}
/**
* This method loads the first value of the first column of the first row of results
* @access public
* @author Matt Ford
* @param string $sql string query
* @return string result from first column of first row of query results
*/
public function loadResult($sql) {
if (!($cur = $this->justquery($sql))) {
return null;
}
$ret = null;
if ($row = $cur->fetch_row()) {
$ret = $row[0];
}
$cur->free();
return $ret;
}
/**
* This method returns the first row of results
* @access public
* @author Matt Ford
* @param string $sql string query
* @return object first row of results
*/
public function loadFirstRow($sql) {
if (!($cur = $this->justquery($sql))) {
return null;
}
$ret = null;
if ($row = $cur->fetch_object()) {
$ret = $row;
}
$cur->free();
return $ret;
}
/**
* This method returns the auto-increment value from the last query run
* @access public
* @author Matt Ford
* @return int auto-incremeted (primary key) value of last query
*/
public function insertid() {
return $this->link->insert_id;
}
/**
* This method returns the number of affected rows in the last insert/update/replace/delete query
* @access public
* @author Matt Ford
* @return int number of affected rows
*/
public function numAffectedRows() {
return $this->link->affected_rows;
}
/**
* This method queries the database, logs data, and returns results
* @access public
* @author Matt Ford
* @param string|array $sql depending on $batch flag, could be a single string query or an array of queries to run
* @param string $key if supplied, each group of results will be indexed with its respective $key's column value as its object index/position
* @param bool $returns determins if any results will be returned or not, merely for I/O
* @param bool $batch flag denoting whether $sql is a string query or an array of queries to loop over
* @return unset|object depending on $returns, could be nothing, or an object of query results
*/
public function query($sql, $key = "", $returns = true, $batch = false) {
$sqls = $result = array ();
switch ($batch) {
default:
case true:
foreach ($sql as $index => $query) {
$this->queries[] = $query;
$answer = $this->link->query($query);
if (!$answer) {
$this->errors[] = $this->link->error;
}
else {
if ($returns != false) {
if ($answer->num_rows > 0){
while ($row = $answer->fetch_object()) {
if ($key != ""){
$result[$index][$row->$key] = $row;
}
else {
$result[$index][] = $row;
}
}
$answer->free();
} else {}
} else {}
}
}
break;
case false:
$this->queries[] = $sql;
$answer = $this->link->query($sql);
if (!$answer) {
$this->errors[] = $this->link->error;
$result = false;
}
else {
if ($returns != false) {
if ($answer->num_rows > 0){
while ($row = $answer->fetch_object()) {
if ($key != ""){
$result[$row->$key] = $row;
}
else {
$result[] = $row;
}
}
$answer->free();
} else {}
}
else {
$result = true;
}
}
break;
}
return $result;
}
/**
* This method simply uses the database library's string escape utility
* @access public
* @author Matt Ford
* @param string $string string needing escaping
* @return string escaped string
*/
public function escapeString($string) {
return $this->link->real_escape_string($string);
}
/**
* This method builds INSERT/UPDATE queries to allow easy query generation/maintenance for long queries.
* @access public
* @author Matt Ford
* @param array $params key/value pair array of parameters for query
* @return string resulting Query string for MySQLi
*/
public function buildSQL($params) {
/*
Usage
#INSERT Statements
$params = array (
"type" => "insert",
"table" => "eventCal_events",
"doNotQuote" => array(),
"data" => array (
"eventName" => $data->request["eventName"],
"eventText" => $data->request["eventText"],
"eventLocation" => $data->request["eventLocation"],
"eventStartDate_month" => $start["month"],
"eventStartDate_day" => $start["day"],
"eventStartDate_year" => $start["year"],
"eventStartDate_time" => $start["time"],
"eventStartDate_timestamp" => $timestampStart,
"eventEndDate_month" => $end["month"],
"eventEndDate_day" => $end["day"],
"eventEndDate_year" => $end["year"],
"eventEndDate_time" => $end["time"],
"eventEndDate_timestamp" => $timestampEnd,
"occursMonthly" => $occursMonthly,
"occursYearly" => $occursYearly,
"dynamicEvent" => $dynamicEvent,
"dynNthDay" => $data->request["dynOccurrence_freq"],
"dynDayName" => $data->request["dynOccurrence_day"],
"dynMonth" => $data->request["dynOccurrence_month"]
)
);
$sql = $database->buildSQL($params);
#UPDATE Statements
$params = array (
"type" => "update",
"table" => "eventCal_events",
"doNotQuote" => array(),
"data" => array (
"eventName" => $data->request["eventName"],
"eventText" => $data->request["eventText"],
"eventLocation" => $data->request["eventLocation"],
"eventStartDate_month" => $start["month"],
"eventStartDate_day" => $start["day"],
"eventStartDate_year" => $start["year"],
"eventStartDate_time" => $start["time"],
"eventStartDate_timestamp" => $timestampStart,
"eventEndDate_month" => $end["month"],
"eventEndDate_day" => $end["day"],
"eventEndDate_year" => $end["year"],
"eventEndDate_time" => $end["time"],
"eventEndDate_timestamp" => $timestampEnd,
"occursMonthly" => $occursMonthly,
"occursYearly" => $occursYearly,
"dynamicEvent" => $dynamicEvent,
"dynNthDay" => $data->request["dynOccurrence_freq"],
"dynDayName" => $data->request["dynOccurrence_day"],
"dynMonth" => $data->request["dynOccurrence_month"]
),
"where" => array (
"eventID" => $data->request["eventID"],
"eventCreator" => $my->userID
)
);
$sql = $database->buildSQL($params);
*/
$sql = "";
$fieldQuantifier = "`";
$valueQuantifier = '"';
$params["type"] = strtolower($params["type"]);
$params["doNotQuote"] = (is_array($params["doNotQuote"]) === true) ? $params["doNotQuote"] : array();
foreach ($params["data"] as $k => $v) {
$value = stripslashes($v);
$params["data"][$k] = $this->escapeString($value);
}
switch ($params["type"]) {
case "insert":
$sql .= "INSERT INTO " . $fieldQuantifier . $params["table"] . $fieldQuantifier . " ";
$sql .= "(" . $fieldQuantifier . implode($fieldQuantifier . ", " . $fieldQuantifier, array_keys($params["data"])) . $fieldQuantifier . ") ";
$sql .= "VALUES(";
$vars = array();
foreach ($params["data"] as $k => $v) {
$v = (in_array($k, $params["doNotQuote"])) ? $v : $valueQuantifier . $v . $valueQuantifier;
$vars[] = $v;
}
$sql .= implode(", ", $vars);
$sql .= ");";
break;
case "update":
$sql .= "UPDATE " . $fieldQuantifier . $params["table"] . $fieldQuantifier . " SET ";
$vars = array();
foreach ($params["data"] as $k => $v) {
$v = (in_array($k, $params["doNotQuote"])) ? $v : $valueQuantifier . $v . $valueQuantifier;
$vars[] = $fieldQuantifier . $k . $fieldQuantifier . " = " . $v;
}
$sql .= implode(", ", $vars);
$vars = array();
if ($params["where"]) {
$sql .= " WHERE ";
foreach ($params["where"] as $k => $v) {
$vars[] = $fieldQuantifier . $k . $fieldQuantifier . " = " . $valueQuantifier . $v . $valueQuantifier;
}
$sql .= implode(" AND ", $vars);
} else {}
$sql .= ";";
break;
}
return $sql;
}
}
?>
本文原创发布php中文网,转载请注明出处,感谢您的尊重!