Update dbwrapper.php

Finish mssql add, now is stable
This commit is contained in:
2022-02-28 09:02:27 +00:00
parent 21f7a18add
commit abdfb36161

View File

@@ -1,6 +1,6 @@
<?php <?php
/* DBWrapper.php - Version 1.7 /* DBWrapper.php - Version 2.01
This script is a simple wrapper for SQLite3, MySQL, PgSQL and MSSQL (Alpha), This script is a simple wrapper for SQLite3, MySQL, PgSQL and MSSQL (sqlsrv),
for make possible to use different BD systems without changing the functions. for make possible to use different BD systems without changing the functions.
For use, in dbw_connect you have to specify type of database (see below) For use, in dbw_connect you have to specify type of database (see below)
Read README.md for details of every function and use Read README.md for details of every function and use
@@ -8,64 +8,65 @@
/** Connect with database */ /** Connect with database */
function dbw_connect($tdb,$server,$database=NULL,$user = NULL,$password=NULL){ function dbw_connect($tdb,$server,$database=NULL,$user = NULL,$password=NULL){ //Instance has to be \X,PORT for MSSQL
$return = null; $return = null;
switch ($tdb){ switch ($tdb){
case "mysql": case "mysql":
case "mysqli": case "mysqli":
$return[0] = mysqli_connect($server,$user,$password,$database) or throwExceptionDBConn(); $return[0] = mysqli_connect($server,$user,$password,$database) or throwExceptionDBConn();
$return[1] = "mysqli"; //Return standard mysqli for other funcs. $return[1] = "mysqli"; //Return standard mysqli for other funcs.
break; break;
case "sqlite": case "sqlite":
case "sqlite3": case "sqlite3":
$return[0] = new SQLite3($server); $return[0] = new SQLite3($server);
if (!$return[0]) throwExceptionDBConn(); if (!$return[0]) throwExceptionDBConn();
$return[1] = "sqlite"; //Return standard SQLite3 for other funcs. $return[1] = "sqlite"; //Return standard SQLite3 for other funcs.
break; break;
case "PostgreSQL": case "PostgreSQL":
case "pg": case "pg":
case "PgSQL": case "PgSQL":
$return[0] = pg_connect("host=$server dbname=$database user=$user password=$password") or throwExceptionDBConn(); $return[0] = pg_connect("host=$server dbname=$database user=$user password=$password") or throwExceptionDBConn();
$return[1] = "PgSQL"; //Return standard PgSQL for other funcs. $return[1] = "PgSQL"; //Return standard PgSQL for other funcs.
break; break;
case 'mssql': case "mssql": //MSSQL using sqlsrv
case "SQLSRV":
case "sqlsrv":
$serverName = "$server"; //If instance and port , has to be IP\INSTANCE:PORT
$connectionOptions = array( $connectionOptions = array(
"Database" => "$database", "database" => "$database",
"UID" => "$user", "uid" => "$user",
"PWD" => "$password" "pwd" => "$password"
); );
// Establishes the connection $conn = sqlsrv_connect($serverName, $connectionOptions);
$conn = sqlsrv_connect($server, $connectionOptions);
var_dump($conn);
if ($conn === false) { if ($conn === false) {
throwExceptionDBConn(var_dump(sqlsrv_errors())); throwExceptionDBConn(var_dump(sqlsrv_errors()));
} }
$return[0] = $conn; $return[0] = $conn;
$return[1] = "mssql"; $return[1] = "sqlsrv";
break; break;
default: default:
return false; return false;
break; break;
} }
return $return; return $return;
} }
function throwExceptionDBConn($str = "") { function throwExceptionDBConn($str = "") {
throw new Exception('Database connection error '); throw new Exception('Database connection error '.$str);
} }
/** Escapes conflictive chars for inserting into database */ /** Escapes conflictive chars for inserting into database */
function dbw_escape_string($conn,$string){ function dbw_escape_string($conn,$string){
switch ($conn[1]){ switch ($conn[1]){
case "mysqli": case "mysqli":
return mysqli_escape_string($conn[0],$string); return mysqli_escape_string($conn[0],$string);
case "sqlite": case "sqlite":
return SQLite3::escapeString($string); return SQLite3::escapeString($string);
case "PgSQL": case "PgSQL":
return pg_escape_string($string); return pg_escape_string($string);
case "mssql": case "sqlsrv":
return $string; //Not implemented return str_replace( "'", "''", $string ); //There is not a func for sqlsrv..
} }
} }
@@ -83,9 +84,10 @@ function dbw_query($conn,$query){
case "PgSQL": case "PgSQL":
$ret = pg_query($query); $ret = pg_query($query);
break; break;
case "mssql": case "sqlsrv":
$ret = sqlsrv_query($conn, $query); $ret = sqlsrv_query($conn[0],$query);
break; break;
} }
//echo "<p>".$query."->".(microtime(true)-$time)." milisegundos</p>"; //echo "<p>".$query."->".(microtime(true)-$time)." milisegundos</p>";
return $ret; return $ret;
@@ -110,10 +112,10 @@ function dbw_fetch_array($conn,$result,$typearray = NULL){
if ($typearray == "ASSOC"){return pg_fetch_array($result,NULL,PGSQL_ASSOC);} if ($typearray == "ASSOC"){return pg_fetch_array($result,NULL,PGSQL_ASSOC);}
if ($typearray == "NUM"){return pg_fetch_array($result,NULL,PGSQL_NUM);} if ($typearray == "NUM"){return pg_fetch_array($result,NULL,PGSQL_NUM);}
break; break;
case "mssql": case "sqlsrv":
if ($typearray == NULL || $typearray == "BOTH"){return sqlsrv_fetch_array($result, SQLSRV_FETCH_BOTH);} if ($typearray == NULL || $typearray == "BOTH"){return sqlsrv_fetch_array($result,SQLSRV_FETCH_BOTH);}
if ($typearray == "ASSOC"){return sqlsrv_fetch_array($result, SQLSRV_FETCH_ASSOC);} if ($typearray == "ASSOC"){return sqlsrv_fetch_array($result,NULL,SQLSRV_FETCH_ASSOC);}
if ($typearray == "NUM"){return sqlsrv_fetch_array($result, SQLSRV_FETCH_NUM);} if ($typearray == "NUM"){return sqlsrv_fetch_array($result,NULL,SQLSRV_FETCH_NUMERIC);}
break; break;
} }
} }
@@ -124,44 +126,51 @@ function dbw_fetch_all($conn,$result,$typearray = NULL){
$ret=null; $ret=null;
switch ($conn[1]){ switch ($conn[1]){
case "mysqli": case "mysqli":
if ($typearray == NULL || $typearray == "BOTH"){return mysqli_fetch_all($result,MYSQLI_BOTH);} if ($typearray == NULL || $typearray == "BOTH"){$ret = mysqli_fetch_all($result,MYSQLI_BOTH);}
if ($typearray == "ASSOC"){return mysqli_fetch_all($result,MYSQLI_ASSOC);} if ($typearray == "ASSOC"){$ret = mysqli_fetch_all($result,MYSQLI_ASSOC);}
if ($typearray == "NUM"){return mysqli_fetch_all($result,MYSQLI_NUM);} if ($typearray == "NUM"){$ret = mysqli_fetch_all($result,MYSQLI_NUM);}
break; break;
case "sqlite": case "sqlite":
$ret = array(); $ret = array();
while ($row = $result->fetchArray()) { //There is not fetchAll in sqlite3, implement it while ($row = $result->fetchArray()) { //There is not fetchAll in sqlite3, implement it
$ret[] = ($row); $ret[] = ($row);
} }
return $ret;
break; break;
case "PgSQL": case "PgSQL":
return pg_fetch_all($result,PGSQL_ASSOC); $ret = pg_fetch_all($result,PGSQL_ASSOC);
break; break;
case "mssql": case 'sqlsrv':
$ret = array(); $ret = array();
while ($row = sqlsrv_fetch_array($result, SQLSRV_FETCH_BOTH)) { //There is not fetchAll in mssql, implement it if ($typearray == NULL || $typearray == "BOTH"){$a = SQLSRV_FETCH_BOTH;}
if ($typearray == NULL || $typearray == "ASSOC"){$a = SQLSRV_FETCH_ASSOC;}
if ($typearray == NULL || $typearray == "NUM"){$a = SQLSRV_FETCH_NUMERIC;}
while ($row = sqlsrv_fetch_array($result,$a)) {
$ret[] = ($row); $ret[] = ($row);
} }
return $ret;
break; break;
} }
//echo "<p>".$query."->".(microtime(true)-$time)." milisegundos</p>"; //echo "<p>".$query."->".(microtime(true)-$time)." milisegundos</p>";
return $ret;
} }
/** Make query and fetch array (For one result) */ /** Make query and fetch array (For one result) */
function dbw_query_fetch_array($conn,$query,$typearray = NULL){ function dbw_query_fetch_array($conn,$query,$typearray = NULL){
$time = microtime(true); $time = microtime(true);
$ret=null;
$result = dbw_query($conn,$query); $result = dbw_query($conn,$query);
return dbw_fetch_array($conn,$result,$typearray); $ret = dbw_fetch_array($conn,$result,$typearray);
//echo "<p>".$query."->".(microtime(true)-$time)." milisegundos</p>";
return $ret;
} }
/** Make query and fetch all in a array */ /** Make query and fetch all in a array */
function dbw_query_fetch_all($conn,$query,$typearray = NULL){ function dbw_query_fetch_all($conn,$query,$typearray = NULL){
$time = microtime(true); $time = microtime(true);
$ret=null;
$result = dbw_query($conn,$query); $result = dbw_query($conn,$query);
return dbw_fetch_all($conn,$result,$typearray); $ret = dbw_fetch_all($conn,$result,$typearray);
//echo "<p>".$query."->".(microtime(true)-$time)." milisegundos</p>"; //echo "<p>".$query."->".(microtime(true)-$time)." milisegundos</p>";
return $ret;
} }
@@ -170,19 +179,20 @@ function dbw_query_goto($conn,$result,$row = 0){
switch ($conn[1]){ switch ($conn[1]){
case "mysqli": case "mysqli":
mysqli_data_seek($result,$row); mysqli_data_seek($result,$row);
break; break;
case "sqlite": case "sqlite":
$result->reset(); $result->reset();
$count = 0; $count = 0;
while ($count != $row){ while ($count != $row){
$result->fetchArray(); $result->fetchArray();
} }
break; break;
case "PgSQL": case "PgSQL":
pg_result_seek($result, $row); pg_result_seek($result, $row);
break; break;
case "mssql": case "sqlsrv":
return sqlsrv_fetch($result,SQLSRV_SCROLL_ABSOLUTE,$row); sqlsrv_fetch($result,SQLSRV_SCROLL_ABSOLUTE,$row);
break;
} }
} }
@@ -196,17 +206,17 @@ function dbw_multi_query($conn,$query,$erasebuffer = 0){
if ($erasebuffer){ if ($erasebuffer){
while(mysqli_next_result($conn[0])){;} //Erase multiquery output for avoid error in next query while(mysqli_next_result($conn[0])){;} //Erase multiquery output for avoid error in next query
} }
break; break;
case "sqlite": case "sqlite":
$conn[0]->exec($query); $conn[0]->exec($query);
break; break;
case "PgSQL": case "PgSQL":
$null = pg_query($query); $null = pg_query($query);
break; break;
case "mssql": case "sqlsrv": //Returns TRUE/FALSE
//Not implemented $ret = sqlsrv_prepare($conn[0],$query);
throw new Exception('Not supported by MSSQL directly'); $null = sqlsrv_execute($ret);
break; break;
} }
} }
@@ -219,10 +229,8 @@ function dbw_last_id($conn){
return $conn[0]->lastInsertRowID(); return $conn[0]->lastInsertRowID();
case "PgSQL": case "PgSQL":
return pg_fetch_array(pg_query("SELECT lastval();"))[0]; return pg_fetch_array(pg_query("SELECT lastval();"))[0];
case "mssql": case "sqlsrv":
//Not implemented return die("Error, not implemented");
throw new Exception('Not supported by MSSQL directly');
break;
} }
} }
@@ -243,23 +251,24 @@ function dbw_num_rows($conn,$result){
return $count; return $count;
case "PgSQL": case "PgSQL":
return pg_num_rows ($result); return pg_num_rows ($result);
case "mssql": case "sqlsrv":
return sqlsrv_num_rows ($result); return sqlsrv_num_rows($result);
} }
} }
/** Escapes conflictive chars for inserting into database */ /** Escapes conflictive chars for inserting into database */
function dbw_free_result($conn,$result){ function dbw_free_result($conn,$result){
switch ($conn[1]){ switch ($conn[1]){
case "mysqli": case "mysqli":
return mysqli_free_result($string); return mysqli_free_result($string);
case "sqlite": case "sqlite":
return NULL; //Not neccesary I think return NULL; //Not neccesary I think
case "PgSQL": case "PgSQL":
return NULL; //¿? return NULL; //¿?
case "msqql": case "sqlsrv":
return sqlsrv_free_result($result); return sqlsrv_free_stmt($result);
} }
} }
@@ -268,15 +277,16 @@ function dbw_close($conn){
switch ($conn[1]){ switch ($conn[1]){
case "mysqli": case "mysqli":
mysqli_close($conn[0]); mysqli_close($conn[0]);
break; break;
case "sqlite": case "sqlite":
$conn[0]->close(); $conn[0]->close();
break; break;
case "PgSQL": case "PgSQL":
pg_close($conn[0]); pg_close($conn[0]);
break; break;
case "mssql": case "sqlsrv":
sqlsrv_close($conn[0]); sqlsrv_close($conn[0]);
break;
} }
} }
@@ -284,6 +294,7 @@ function dbw_close($conn){
function dbw_fetch_assoc($conn,$result){return dbw_fetch_array($conn,$result,"ASSOC");} function dbw_fetch_assoc($conn,$result){return dbw_fetch_array($conn,$result,"ASSOC");}
function dbw_fetch_row($conn,$result){return dbw_fetch_array($conn,$result,"NUM");} function dbw_fetch_row($conn,$result){return dbw_fetch_array($conn,$result,"NUM");}
function dbw_query_fetch_one($conn,$query,$typearray = NULL){return dbw_query_fetch_array($conn,$query,$typearray);}
function dbw_data_seek($conn,$result){return dbw_query_goto($conn,$result,$row = 0);} function dbw_data_seek($conn,$result){return dbw_query_goto($conn,$result,$row = 0);}
function dbw_result_seek($conn,$result){return dbw_query_goto($conn,$result,$row = 0);} function dbw_result_seek($conn,$result){return dbw_query_goto($conn,$result,$row = 0);}