852 lines
30 KiB
PHP
852 lines
30 KiB
PHP
|
<?php
|
||
|
|
||
|
/* PDO Database connection class
|
||
|
*
|
||
|
* @author: SuperSmash
|
||
|
* @copyright: SuperSmash
|
||
|
* @version: 1.0
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* How to use this class :
|
||
|
*
|
||
|
* Create a database connection:
|
||
|
*
|
||
|
* $database = new database("databaseType","serverIP","databaseName","userName","password","(optional) port");
|
||
|
* Example : $database = new database ("mysql","localhost","school","root","myPassword","");
|
||
|
*
|
||
|
* Check if the database connection was successfull
|
||
|
*
|
||
|
* if (!$database) {
|
||
|
* die ("Database connection cannot be established");
|
||
|
* }
|
||
|
*
|
||
|
* Get the latest database error
|
||
|
*
|
||
|
* echo $database->getError();
|
||
|
*
|
||
|
* Execute a query to the database:
|
||
|
*
|
||
|
* $database->query("SELECT * FROM databaseName WHERE id = '1'";)
|
||
|
*
|
||
|
* You can also get the inserted ID of the query you executed:
|
||
|
*
|
||
|
* $insertedId = $database->insert("TABLE", "record1,record2,record3", "value1,value2,value3";)
|
||
|
* Example: INSERT INTO USERS,firstname,lastname,VALUES('Amber','Heard') WHERE ADDRESS = 'Dark avenue 2';
|
||
|
* Example: $insertedID = $database->insert("USERS","ADDRESS='Dark avenue 2','Amber',Heard'");
|
||
|
*
|
||
|
* Get the rowCount of an execute query
|
||
|
*
|
||
|
* echo $database->rowcount();
|
||
|
*
|
||
|
* Delete a row in the database
|
||
|
*
|
||
|
* $database->query("DELETE FROM USERS WHERE ID=1;");
|
||
|
*
|
||
|
* Get the affected rows affected by the delete statement
|
||
|
*
|
||
|
* $affectedRows = $database->delete("USERS", "ID=1");
|
||
|
*
|
||
|
* Update rows in the database
|
||
|
*
|
||
|
* Example: $database->query("UPDATE USERS SET firstname='Joyce' WHERE ID=1;");
|
||
|
* Example 2: $affectedRows = $database->update("USERS", "FIRSTNAME='Joyce'", "ID=1");
|
||
|
*
|
||
|
* Get the ID that was inserted last in the database
|
||
|
*
|
||
|
* $lastID = $database->getLatestId("Table","recordName");
|
||
|
*
|
||
|
* Example: $lastID = $database->getLatestId("USERS","Firstname");
|
||
|
*
|
||
|
* Create a Anti-SQL injection statement to the database
|
||
|
*
|
||
|
* $parameters = array(":id@0@INT", ":firstname@amber@STR");
|
||
|
* $ID = $database->query_secure("INSERT INTO USERS (id,firstname) VALUES(:id,:firstname);", $parameters, false);
|
||
|
* (If the last false statement in the query above is set to true the class will return the resultset of the record)
|
||
|
* (else if the last false statement in the query above is set to false you will get a true of false idenitifying if * the query was executed successfully to the database).
|
||
|
*
|
||
|
* The $ID variable will now hold the last inserted ID.
|
||
|
*
|
||
|
* Show all the table that are in your database
|
||
|
*
|
||
|
* $result = $database->ShowTables("databaseName");
|
||
|
* Example: $result = $database->ShowTables("school");
|
||
|
*
|
||
|
* Output the result to the screen in a clean way:
|
||
|
*
|
||
|
* foreach($result as $row){
|
||
|
* $i++;
|
||
|
* echo "$row[$i]" . "<br />";
|
||
|
*
|
||
|
* Show all the databases this class holds (get all the databases you got permissions for)
|
||
|
*
|
||
|
* $result = $database->showDatabases();
|
||
|
*
|
||
|
* Output the result to the screen in a clean way:
|
||
|
*
|
||
|
* foreach($result as $row){
|
||
|
* $i++;
|
||
|
* echo "$row[$i]" . "<br />";
|
||
|
*
|
||
|
* close the database connection;
|
||
|
*
|
||
|
* $database->close();
|
||
|
*/
|
||
|
|
||
|
class Database
|
||
|
{
|
||
|
|
||
|
// Create an array with all the database types this class can connect to
|
||
|
private $database_types = array("databaselibrary", // Database Library (used by PHP)
|
||
|
"firebird", // firebird
|
||
|
"ibm", // IBM
|
||
|
"informix", // Informix
|
||
|
"mssql", // Microsoft SQL (<= 2000)
|
||
|
"mysql", // mysql
|
||
|
"odbc", // Open database connectivity (Microsoft Access)
|
||
|
"oracle", // Oracle
|
||
|
"postgre", // Postgre SQL
|
||
|
"sqlite2", // SQLite 2
|
||
|
"sqlite3", // SQLite 3
|
||
|
"sql", // Microsoft SQL
|
||
|
);
|
||
|
|
||
|
private $server; // This variable holds the host name of the server (serverName) used by the application
|
||
|
private $database; // This variable holds the databaseName of the database used by the application
|
||
|
private $user; // This variable holds the userName of the database used by the application
|
||
|
private $password; // This variable holds the password of the database used by the application
|
||
|
private $port; // This variable holds the port of the database used by the application
|
||
|
private $database_type; // This variable holds the database type of the database used by the application
|
||
|
private $root_mdb; // This variable holds the root mdb of the database used by the application
|
||
|
private $debug = false; // This variable holds the debugging state of the class
|
||
|
|
||
|
private $sql; // This variable holds all the sql connection parameters
|
||
|
private $con; // This variable holds the connection of the database used by the application
|
||
|
private $err_msg = ""; // This variable holds the error message that was trown by the database (if exists)
|
||
|
|
||
|
/**
|
||
|
* Create the constructor
|
||
|
* @param string $database_types (specify the database connection)
|
||
|
*
|
||
|
* These are the database connection that are accepted by this class:
|
||
|
*
|
||
|
* connection name - connection description
|
||
|
* --------------------------------------------
|
||
|
* databaselibrary Database Library database (used by PHP)
|
||
|
* firebird firebird database
|
||
|
* ibm IBM database
|
||
|
* informix Informix database
|
||
|
* mssql Microsoft SQL Server database (V. 2000 and lower)
|
||
|
* mysql mysql database
|
||
|
* odbc Open database connectivity (Microsoft Access)
|
||
|
* oracle Oracle database
|
||
|
* postgre postgre SQL database
|
||
|
* sqlite2 SQLite 2 database
|
||
|
* sqlite3 SQLite 3 database
|
||
|
* sql Microsoft SQL
|
||
|
*
|
||
|
* @param string $server (The server where the database is located)
|
||
|
* @param string $database (The name of the database)
|
||
|
* @param string $user (The userName of the connection to the database)
|
||
|
* @param string $password (The password of the connection to the database)
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
// Create the constructor and initialise the connection to the specified server
|
||
|
public function __construct($database_type,$server,$database,$user,$password,$port)
|
||
|
{
|
||
|
$this->database_type = strtolower($database_type);
|
||
|
$this->server = $server;
|
||
|
$this->database = $database;
|
||
|
$this->user = $user;
|
||
|
$this->password = $password;
|
||
|
$this->port = $port;
|
||
|
}
|
||
|
|
||
|
// initialise class and connects to the database
|
||
|
public function open()
|
||
|
{
|
||
|
if(in_array($this->database_type, $this->database_types))
|
||
|
{
|
||
|
try {
|
||
|
switch ($this->database_type)
|
||
|
{
|
||
|
|
||
|
// Database Library connection
|
||
|
|
||
|
case "databaselibrary": // default port used by database => 10060
|
||
|
$this->con = new PDO("dblib:host=".$this->server.
|
||
|
":".$this->port.";
|
||
|
dbname=".$this->database,$this->user,$this->password
|
||
|
);
|
||
|
break;
|
||
|
|
||
|
// firebird connection
|
||
|
|
||
|
case "firebird": // default port used by database => 3050
|
||
|
$this->con = new PDO("firebird:dbname=".$this->server.
|
||
|
":".$this->database, $this->user, $this->password
|
||
|
);
|
||
|
break;
|
||
|
|
||
|
// ibm connection
|
||
|
|
||
|
case "ibm":
|
||
|
$this->con = new PDO("ibm:DRIVER={IBM DB2 ODBC DRIVER};DATABASE=".$this->database."; HOSTNAME=".$this->host.";
|
||
|
PORT=".$this->port.";
|
||
|
PROTOCOL=TCPIP;",
|
||
|
$this->user, $this->password
|
||
|
);
|
||
|
break;
|
||
|
|
||
|
// informix connection
|
||
|
|
||
|
case "informix":
|
||
|
$this->con = new PDO("informix:DSN=InformixDB", $this->user, $this->password);
|
||
|
break;
|
||
|
|
||
|
// mssql connection
|
||
|
|
||
|
case "mssql":
|
||
|
$this->con = new PDO("mssql:host=".$this->server.";
|
||
|
dbname=".$this->database, $this->user, $this->password
|
||
|
);
|
||
|
break;
|
||
|
|
||
|
// mysql connection
|
||
|
|
||
|
case "mysql":
|
||
|
if ($this->port != "") {
|
||
|
$this->con = new PDO("mysql:host=".$this->server.";
|
||
|
port=".$this->port.";
|
||
|
dbname=".$this->database, $this->user, $this->password
|
||
|
);
|
||
|
}else{
|
||
|
$this->con = new PDO("mysql:host=".$this->server.";
|
||
|
dbname=".$this->database, $this->user, $this->password
|
||
|
);
|
||
|
}
|
||
|
break;
|
||
|
|
||
|
// open database connectivity
|
||
|
|
||
|
case "odbc":
|
||
|
$this->con = new PDO("odbc:Driver={Microsoft Access Driver (*.mdb)};
|
||
|
Dbq=C:\accounts.mdb;Uid=".$this->user
|
||
|
);
|
||
|
break;
|
||
|
|
||
|
// oracle connection
|
||
|
|
||
|
case "oracle":
|
||
|
$this->con = new PDO("OCI:dbname=".$this->database.";
|
||
|
charset=UTF-8", $this->user, $this->password
|
||
|
);
|
||
|
break;
|
||
|
|
||
|
// postgre connection
|
||
|
|
||
|
case "postgre":
|
||
|
|
||
|
if($this->port!="")
|
||
|
{
|
||
|
$this->con = new PDO("pgsql:dbname=".$this->database.";
|
||
|
port=".$this->port.";
|
||
|
host=".$this->server, $this->user, $this->password
|
||
|
);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$this->con = new PDO("pgsql:dbname=".$this->database.";
|
||
|
host=".$this->server, $this->user, $this->password
|
||
|
);
|
||
|
}
|
||
|
break;
|
||
|
|
||
|
// sqlite2 connection
|
||
|
|
||
|
case "sqlite2":
|
||
|
$this->con = new PDO("sqlite:".$this->server);
|
||
|
break;
|
||
|
|
||
|
// sqlite3 connection
|
||
|
|
||
|
case "sqlite3":
|
||
|
$this->con = new PDO("sqlite::memory");
|
||
|
break;
|
||
|
|
||
|
// sql connection
|
||
|
|
||
|
case "sql":
|
||
|
$this->con = new PDO("sqlsrv:server=".$this->server.";
|
||
|
database=".$this->database, $this->user, $this->password
|
||
|
);
|
||
|
}
|
||
|
|
||
|
if ($this->debug)
|
||
|
{
|
||
|
$this->showDebugInformation();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
// Create the exception that will be thrown by the PDO if there is an error
|
||
|
$this->con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
||
|
}
|
||
|
return $this->con;
|
||
|
}
|
||
|
catch(PDOException $e)
|
||
|
{
|
||
|
$this->log ("Error: ". $e->getMessage());
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$this->log("The parameters that are given are invalid. <br />
|
||
|
Possible reasons: <br /><br />
|
||
|
1. The parameters that are given are invalid for the class. <br />
|
||
|
2. The database connection is not supported by the class.<br /><br />
|
||
|
Please contact the administrator of the application. => info@SuperSmash.nl"
|
||
|
);
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
private function log($message)
|
||
|
{
|
||
|
$this->err_msg = "SuperSmash Database Connection class:<br />
|
||
|
=====================================<br /><br />
|
||
|
$message";
|
||
|
}
|
||
|
|
||
|
private function showDebugInformation(){
|
||
|
|
||
|
// Create the exception that will be thrown by the PDO if there is an error
|
||
|
$this->con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
||
|
|
||
|
// The following extra attributes will only be shown in debugging mode
|
||
|
|
||
|
// Create the exception that will be thrown by the PDO if there is a warning
|
||
|
$this->con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
|
||
|
|
||
|
// Create the exception that will be thrown by the PDO if there is an error (silent mode)
|
||
|
$this->con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
|
||
|
|
||
|
// Log all database connection information (for debugging)
|
||
|
echo "SuperSmash Database debug information:<br />
|
||
|
============================<br /><br />";
|
||
|
echo "Status: " . $this->con->getAttribute(PDO::ATTR_CONNECTION_STATUS) . "<br />";
|
||
|
echo "Drivername: " . $this->con->getAttribute(PDO::ATTR_DRIVER_NAME) . "<br />";
|
||
|
echo "Serverversion: " . $this->con->getAttribute(PDO::ATTR_SERVER_VERSION) . "<br />";
|
||
|
echo "Clientversion: " . $this->con->getAttribute(PDO::ATTR_CLIENT_VERSION) . "<br />";
|
||
|
echo "Serverinfo: " . $this->con->getAttribute(PDO::ATTR_SERVER_INFO) . "<br />";
|
||
|
die();
|
||
|
|
||
|
}
|
||
|
|
||
|
// Print all the available drivers to the screen (for instant debugging off supported drivers)
|
||
|
public function drivers()
|
||
|
{
|
||
|
print_r(PDO::getAvailableDrivers());
|
||
|
}
|
||
|
|
||
|
//Execute the query to the database
|
||
|
public function query($sql_statement)
|
||
|
{
|
||
|
$this->err_msg = "";
|
||
|
if($this->con!=null)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
$this->sql=$sql_statement;
|
||
|
return $this->con->query($this->sql);
|
||
|
}
|
||
|
catch(PDOException $e)
|
||
|
{
|
||
|
$this->log("Error: ". $e->getMessage());
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$this->log("Error: Connection to database lost.");
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//Execute queries with Anti SQL injection
|
||
|
public function query_secure($sql_statement, $params, $fetch_rows=false)
|
||
|
{
|
||
|
$this->err_msg = "";
|
||
|
if($this->con!=null)
|
||
|
{
|
||
|
$obj = $this->con->prepare($sql_statement);
|
||
|
for($i=0;$i<count($params);$i++)
|
||
|
{
|
||
|
$params_split = explode("@",$params[$i]);
|
||
|
if($params_split[2]=="INT")
|
||
|
$obj->bindParam($params_split[0], $params_split[1], PDO::PARAM_INT);
|
||
|
else
|
||
|
$obj->bindParam($params_split[0], $params_split[1], PDO::PARAM_STR);
|
||
|
}
|
||
|
try
|
||
|
{
|
||
|
$obj->execute();
|
||
|
}
|
||
|
catch(PDOException $e)
|
||
|
{
|
||
|
$this->log("Error: ". $e->getMessage());
|
||
|
return false;
|
||
|
}
|
||
|
if($fetch_rows)
|
||
|
return $obj->fetchAll();
|
||
|
if(is_numeric($this->con->lastInsertId()))
|
||
|
return $this->con->lastInsertId();
|
||
|
return true;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$this->log("Error: Connection to database lost.");
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Get the first row of a query in the database
|
||
|
public function query_first($sql_statement)
|
||
|
{
|
||
|
$this->err_msg = "";
|
||
|
if($this->con!=null)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
$sttmnt = $this->con->prepare($sql_statement);
|
||
|
$sttmnt->execute();
|
||
|
return $sttmnt->fetch();
|
||
|
}
|
||
|
catch(PDOException $e)
|
||
|
{
|
||
|
$this->log("Error: ". $e->getMessage());
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$this->log("Error: Connection to database lost.");
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Get the first tableCell from a query in the database
|
||
|
public function query_single($sql_statement)
|
||
|
{
|
||
|
$this->err_msg = "";
|
||
|
if($this->con!=null)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
$sttmnt = $this->con->prepare($sql_statement);
|
||
|
$sttmnt->execute();
|
||
|
return $sttmnt->fetchColumn();
|
||
|
}
|
||
|
catch(PDOException $e)
|
||
|
{
|
||
|
$this->log("Error: ". $e->getMessage());
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$this->log("Error: Connection to database lost.");
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Return the rowcount of a query in the database
|
||
|
public function rowcount()
|
||
|
{
|
||
|
$this->err_msg = "";
|
||
|
if($this->con!=null)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
$stmnt_tmp = $this->stmntCount($this->sql);
|
||
|
if($stmnt_tmp!=false && $stmnt_tmp!="")
|
||
|
{
|
||
|
return $this->query_single($stmnt_tmp);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$this->log("Error: A few data required.");
|
||
|
return -1;
|
||
|
}
|
||
|
}
|
||
|
catch(PDOException $e)
|
||
|
{
|
||
|
$this->log("Error: ". $e->getMessage());
|
||
|
return -1;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$this->log("Error: Connection to database lost.");
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Return all the colum names in the database (as an array)
|
||
|
public function columns($table)
|
||
|
{
|
||
|
$this->err_msg = "";
|
||
|
$this->sql="Select * From $table";
|
||
|
if($this->con!=null)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
$q = $this->con->query($this->sql);
|
||
|
$column = array();
|
||
|
foreach($q->fetch(PDO::FETCH_ASSOC) as $key=>$val)
|
||
|
{
|
||
|
$column[] = $key;
|
||
|
}
|
||
|
return $column;
|
||
|
}
|
||
|
catch(PDOException $e)
|
||
|
{
|
||
|
$this->log("Error: ". $e->getMessage());
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$this->log("Error: Connection to database lost.");
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Insert the query and get the new ID from the database
|
||
|
public function insert($table, $data){
|
||
|
$this->err_msg = "";
|
||
|
if($this->con!=null)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
$texto = "Insert Into $table (";
|
||
|
$texto_extra = ") Values (";
|
||
|
$texto_close = ")";
|
||
|
$data_column = explode(",", $data);
|
||
|
for($x=0;$x<count($data_column);$x++)
|
||
|
{
|
||
|
$data_content = explode("=", $data_column[$x]); //0=Field, 1=Value
|
||
|
if($x==0)
|
||
|
{
|
||
|
$texto.= $data_content[0];
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$texto.= "," . $data_content[0]; }
|
||
|
if($x==0)
|
||
|
{
|
||
|
$texto_extra.= $data_content[1];
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$texto_extra.= "," . $data_content[1];
|
||
|
}
|
||
|
}
|
||
|
$this->con->exec("$texto $texto_extra $texto_close");
|
||
|
return $this->con->lastInsertId();
|
||
|
}
|
||
|
catch(PDOException $e)
|
||
|
{
|
||
|
$this->log("Error: ". $e->getMessage());
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$this->log("Error: Connection to database lost.");
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Update the tables in the database
|
||
|
public function update($table, $data, $condition="")
|
||
|
{
|
||
|
$this->err_msg = "";
|
||
|
if($this->con!=null)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
return (trim($condition)!="") ? $this->con->exec("update $table set $data where $condition") : $this->con->exec("update $table set $data");
|
||
|
}
|
||
|
catch(PDOException $e)
|
||
|
{
|
||
|
$this->err_msg = "Error: ". $e->getMessage();
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$this->log("Error: Connection to database lost.");
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Delete a record from the database
|
||
|
public function delete($table, $condition="")
|
||
|
{
|
||
|
$this->err_msg = "";
|
||
|
if($this->con!=null)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
return (trim($condition)!="") ? $this->con->exec("delete from $table where $condition") : $this->con->exec("delete from $table");
|
||
|
}
|
||
|
catch(PDOException $e)
|
||
|
{
|
||
|
$this->log("Error: ". $e->getMessage());
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$this->log("Error: Connection to database lost.");
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//Execute Store Procedures
|
||
|
public function execute($sp_query)
|
||
|
{
|
||
|
$this->err_msg = "";
|
||
|
if($this->con!=null)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
$this->con->exec("$sp_query");
|
||
|
return true;
|
||
|
}
|
||
|
catch(PDOException $e)
|
||
|
{
|
||
|
$this->log("Error: ". $e->getMessage());
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$this->log("Error: Connection to database lost.");
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Get the latest ID from the specified table in the database
|
||
|
public function getLatestId($db_table, $table_field)
|
||
|
{
|
||
|
$this->err_msg = "";
|
||
|
$sql_statement = "";
|
||
|
$dbtype = $this->database_type;
|
||
|
|
||
|
if($dbtype=="sql" || $dbtype=="mssql" || $dbtype=="ibm" || $dbtype=="databaselibrary" || $dbtype=="odbc")
|
||
|
{
|
||
|
$sql_statement = "select top 1 $table_field from $db_table order by $table_field desc";
|
||
|
}
|
||
|
if($dbtype=="oracle")
|
||
|
{
|
||
|
$sql_statement = "select $table_field from $db_table where ROWNUM<=1 order by $table_field desc";
|
||
|
}
|
||
|
if($dbtype=="informix" || $dbtype=="firebird")
|
||
|
{
|
||
|
$sql_statement = "select first 1 $table_field from $db_table order by $table_field desc";
|
||
|
}
|
||
|
if($dbtype=="mysql" || $dbtype=="sqlite2" || $dbtype=="sqlite3")
|
||
|
{
|
||
|
$sql_statement = "select $table_field from $db_table order by $table_field desc limit 1";
|
||
|
}
|
||
|
if($dbtype=="postgre")
|
||
|
{
|
||
|
$sql_statement = "select $table_field from $db_table order by $table_field desc limit 1 offset 0";
|
||
|
}
|
||
|
|
||
|
if($this->con!=null)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
return $this->query_single($sql_statement);
|
||
|
}
|
||
|
catch(PDOException $e)
|
||
|
{
|
||
|
$this->log("Error: ". $e->getMessage());
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$this->log("Error: Connection to database lost.");
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//Get all the tables from a specified database
|
||
|
public function ShowTables($database)
|
||
|
{
|
||
|
$this->err_msg = "";
|
||
|
$complete = "";
|
||
|
$sql_statement = "";
|
||
|
$dbtype = $this->database_type;
|
||
|
|
||
|
if($dbtype=="sql" || $dbtype=="mssql" || $dbtype=="ibm" || $dbtype=="databaselibrary" || $dbtype=="odbc" || $dbtype=="sqlite2" || $dbtype=="sqlite3")
|
||
|
{
|
||
|
$sql_statement = "select name from sysobjects where xtype='U'";
|
||
|
}
|
||
|
if($dbtype=="oracle")
|
||
|
{
|
||
|
//If the query statement fail, try with uncomment the next line:
|
||
|
//$sql_statement = "SELECT table_name FROM tabs";
|
||
|
$sql_statement = "SELECT table_name FROM cat";
|
||
|
}
|
||
|
if($dbtype=="informix" || $dbtype=="firebird")
|
||
|
{
|
||
|
$sql_statement = "SELECT RDB$RELATION_NAME FROM RDB$RELATIONS WHERE RDB$SYSTEM_FLAG = 0 AND RDB$VIEW_BLR IS NULL ORDER BY RDB$RELATION_NAME";
|
||
|
}
|
||
|
if($dbtype=="mysql")
|
||
|
{
|
||
|
if($database!="")
|
||
|
{
|
||
|
$complete = " from $database";
|
||
|
}
|
||
|
$sql_statement = "show tables $complete";
|
||
|
}
|
||
|
if($dbtype=="postgre")
|
||
|
{
|
||
|
$sql_statement = "select relname as name from pg_stat_user_tables order by relname";
|
||
|
}
|
||
|
|
||
|
if($this->con!=null)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
$this->sql=$sql_statement;
|
||
|
return $this->con->query($this->sql);
|
||
|
}
|
||
|
catch(PDOException $e)
|
||
|
{
|
||
|
$this->log("Error: ". $e->getMessage());
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$this->log("Error: Connection to database lost.");
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//Get all databases that exists on the server (and where you got permission to use them)
|
||
|
public function showDatabases()
|
||
|
{
|
||
|
$this->err_msg = "";
|
||
|
$sql_statement = "";
|
||
|
$dbtype = $this->database_type;
|
||
|
|
||
|
if($dbtype=="sql" || $dbtype=="mssql" || $dbtype=="ibm" || $dbtype=="databaselibrary" || $dbtype=="odbc" || $dbtype=="sqlite2" || $dbtype=="sqlite3")
|
||
|
{
|
||
|
$sql_statement = "SELECT name FROM sys.Databases";
|
||
|
}
|
||
|
if($dbtype=="oracle")
|
||
|
{
|
||
|
//If the query statement fail, try with uncomment the next line:
|
||
|
//$sql_statement = "select * from user_tablespaces";
|
||
|
$sql_statement = "select * from v$database";
|
||
|
}
|
||
|
if($dbtype=="informix" || $dbtype=="firebird")
|
||
|
{
|
||
|
$sql_statement = "";
|
||
|
}
|
||
|
if($dbtype=="mysql")
|
||
|
{
|
||
|
$sql_statement = "SHOW DATABASES";
|
||
|
}
|
||
|
if($dbtype=="postgre")
|
||
|
{
|
||
|
$sql_statement = "select datname as name from pg_database";
|
||
|
}
|
||
|
|
||
|
if($this->con!=null)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
$this->sql=$sql_statement;
|
||
|
return $this->con->query($this->sql);
|
||
|
}
|
||
|
catch(PDOException $e)
|
||
|
{
|
||
|
$this->log("Error: ". $e->getMessage());
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$this->log("Error: Connection to database lost.");
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//Get the latest error ocurred in the connection
|
||
|
public function getError()
|
||
|
{
|
||
|
return trim($this->err_msg)!="" ? "<span style='color:#FF0000;background:#FFEDED;font-weight:bold;border:2px solid #FF0000;padding:2px 4px 2px 4px;'>".$this->err_msg."</span><br />" : "";
|
||
|
}
|
||
|
|
||
|
//Disconnect from database
|
||
|
public function close()
|
||
|
{
|
||
|
$this->err_msg = "";
|
||
|
if($this->con)
|
||
|
{
|
||
|
$this->con = null;
|
||
|
return true;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
$this->log("Error: Connection to database lost.");
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//Build the query neccesary for the count(*) in rowcount method
|
||
|
private function stmntCount($query_stmnt)
|
||
|
{
|
||
|
if(trim($query_stmnt)!="")
|
||
|
{
|
||
|
$query_stmnt = trim($query_stmnt);
|
||
|
$query_split = explode(" ",$query_stmnt);
|
||
|
$query_flag = false;
|
||
|
$query_final = "";
|
||
|
|
||
|
for($x=0;$x<count($query_split);$x++)
|
||
|
{
|
||
|
//Checking "SELECT"
|
||
|
if($x==0 && strtoupper(trim($query_split[$x]))=="SELECT")
|
||
|
$query_final = "SELECT count(*) ";
|
||
|
if($x==0 && strtoupper(trim($query_split[$x]))!="SELECT")
|
||
|
return false;
|
||
|
|
||
|
//Checking "FROM"
|
||
|
if(strtoupper(trim($query_split[$x]))=="FROM")
|
||
|
{
|
||
|
$query_final .= "FROM ";
|
||
|
$query_flag = true;
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
//Building the query
|
||
|
if(trim($query_split[$x])!="" && $query_flag)
|
||
|
$query_final .= " " . trim($query_split[$x]) . " ";
|
||
|
}
|
||
|
return trim($query_final);
|
||
|
}
|
||
|
return false;
|
||
|
}
|
||
|
}
|
||
|
?>
|