Fino ad ora, stavo considerando funzioni MySQLi in PHP un esempio di DAL. E ho avviato un semplice progetto da pubblicare in un articolo con il titolo "che inizia con PHP e DAL e MySQL"
Ma quando ho fatto una ricerca per alcuni argomenti da aggiungere nel mio articolo ho "scoperto" due cose:
- Il sito PHP.net non elenca MySQLi pagina su DAL
- Molti articoli parlano di MySQLi come libreria o API, ma non ho trovato nessuno che lo affermasse come DAL.
E ora ho questa domanda: perché il PDO di classe è considerato un esempio di DAL, ma la classe MySQLi non è considerata un esempio DAL?
Quello che stavo pensando di scrivere è qualcosa del genere:
If you create a class named Container, like the code bellow, it's easy to see the access to DAL by functions: mysqli_connect, mysqli_query, and the others mysqli_functions
// this is a very basic implementation, and need many improvements, it is just an example
class Container
{
private $_Connection = null;
private $_Fields = null;
function __construct($host, $user, $password, $database)
{
$connection = mysqli_connect($host,$user,$password);
if( $connection )
{
mysqli_select_db($connection, $database);
mysqli_set_charset($connection, "utf8");
$this->_Connection = $connection;
}
}
function __destruct()
{
if( $this->_Connection )
{
mysqli_close($this->_Connection);
}
}
function Query( $sql )
{
$dataset = array();
$result = mysqli_query( $this->_Connection, $sql );
if ($result)
{
$this->_Fields = mysqli_fetch_fields($result);
while($data = mysqli_fetch_assoc($result))
{
$dataset[] = $row;
}
}
return $dataset;
}
function Fields( $index )
{
if(isset($index))
{
return $this->_Fields[$index];
}
else
{
return $this->_Fields;
}
}
}
16/02/17:
Che cosa succede se modifico il costruttore della mia classe Container in qualcosa del tipo:
function __construct($driver, $host, $user, $password, $database)
{
switch( $driver )
{
case "MYSQL": $connection = mysqli_connect($host,$user,$password);
if( $connection )
{
mysqli_select_db($connection, $database);
mysqli_set_charset($connection, "utf8");
$this->_Connection = $connection;
}
break;
case "SQLServer": // to do...
case "Oracle": // to do...
}
}
E apporta modifiche simili ai metodi Contenitore :: Query e Contenitore :: Campi .
Quindi, in questo caso, la mia classe Container sarà un esempio di DAL?
17/02/17:
Qualcuno può creare un DAL per un database specifico?
In questo modo: link
This is a Data Access Layer for MySQL