Skip to content

Instantly share code, notes, and snippets.

@paramah
Last active September 26, 2015 06:38
Show Gist options
  • Save paramah/1055938 to your computer and use it in GitHub Desktop.
Save paramah/1055938 to your computer and use it in GitHub Desktop.
simple DB in PHP
<?php
/** \brief DbAdapter - adapter bazy danych
Klasa wykonująca proste zapytania SQL
\author Aleksander Cynarski (cynarski.pl)
\author $LastChangedBy$
\date 2008-05-24
\date $LastChangedDate$
\version $Rev$
\sa
**/
class DbAdapter extends DbConn
{
protected $connection; //!< Handler połączenia
protected $table; //!< Nazwa tablicy
protected $id_field; //!< Nazwa pola indeksującego
protected $fields = array(); //!< Tablica pól i ich wartości
private $sorted;
/** \brief Konstruktor klasy
\author Aleksander Cynarski cynarski.pl
\date 2008-05-24
\param $table Nazwa tablicy
\param $id_field Nazwa pola indeksującego
\return description of return value
\sa
**/
public function __construct($table,$id_field="")
{
$this->connection = DbConn::getConnection();
$this->table = $table;
$sql = "DESCRIBE `".$table."`";
if (!($result = $this->connection->query($sql)))
{
return;
}
while ($field = $result->fetch_assoc())
{
$this->fields[$field['Field']] = array(
'name' => $field['Field'],
'type' => (
(strpos($field['Type'],"(") === FALSE) ?
((strpos($field['Type']," ") === FALSE) ? ($field['Type']) : (substr($field['Type'],0,strpos($field['Type']," ")))) : (substr($field['Type'],0,strpos($field['Type'],"(")))),
'size' => ((strpos($field['Type'],"(") === FALSE) ? ("") : (substr($field['Type'],strpos($field['Type'],"(")+1,strpos($field['Type'],")")-strpos($field['Type'],"(")-1))),
'unsigned' => ((strpos($field['Type'],"unsigned") === FALSE) ? (0) : (1)),
'key' => $field['Key'],
'required' => (($field['Null'] == "YES" || $field['Default'] != "" || $field['Extra'] == "auto_increment") ? (0) : (1)),
);
if ($id_field == "" && $field['Key'] == "PRI") $this->id_field = $field['Field'];
}
if ($id_field != "") $this->id_field = $id_field;
$result->close();
}
public function getFields()
{
}
/** \biref Sprawdzanie czy dana zmienna pasuje do definicji krotki w bazie danych
\author Aleksander Cynarski
\param string $name Nazwa pola
\param string $value Zmienna do prowadzenia
\return integer
\sa
**/
public function checkField($name,$value)
{
if (!array_key_exists($name,$this->fields)) {
return -1;
}
switch ((string)$this->fields[$name]['type']) {
case "int":
case "bigint":
case "tinyint":
if ((int)$value != $value) return -2;
break;
case "varchar":
if (mb_strlen($value) > $this->fields[$name]['size']) return -3;
break;
case "datetime":
break;
default:
break;
}
return 0;
}
/** \biref Rekursywne sprawdzanie wartości dla pól w bazie danych
/author Aleksander Cynarski
/param array $fields Zmienna deifniująca pola i ich wartości
/return array
/sa
**/
public function checkFields($fields)
{
$result = array();
foreach ($fields as $name => $value)
{
$result[$name] = $this->checkField($name,$value);
}
return $result;
}
/**
* Dodawanie rekordu do bazy danych
*
* @param array $fields Zmienna deifniująca pola do wprowadzenia
* @return bool
* @author Aleksander Cynarski
**/
public function newRow($fields)
{
$names = "";
$values = "";
$separator = "";
foreach ($fields as $name => $value)
{
$names .= $separator."`".$name."`";
$values .= $separator."'".$value."'";
$separator = ", ";
}
$sql = "INSERT INTO `".$this->table."` ";
$sql .= "(".$names.") ";
$sql .= "VALUES ";
$sql .= "(".$values.") ";
if(__SQL_DEBUG__ == TRUE) echo $sql;
if (!$this->connection->query($sql))
{
return FALSE;
}
return $this->connection->insert_id;
}
/**
* Pobranie rekordu do bazy danych
*
* @param string $id Wartość pola indeksu dla którego pobrać wartość
* @return array
* @author Aleksander Cynarski
**/
public function getRow($id)
{
$sql = "SELECT * FROM `".$this->table."` WHERE ";
$sql .= "`".$this->id_field."` = '".$id."' ";
if(__SQL_DEBUG__ == TRUE) echo $sql;
if (!($result = $this->connection->query($sql)))
{
return FALSE;
}
if($this->connection->affected_rows >= 1)
{
$rows = array();
while ($row = $result->fetch_assoc())
{
$rows[] = $row;
}
return $rows;
}
else
{
return $result->fetch_assoc();
}
}
public function sortQuery($query)
{
$this->sorted = $query;
}
/**
* Pobranie wszystkich danych z bazy
*
* @return array
* @author Aleksander Cynarski
**/
public function getRows()
{
$sql = "SELECT * FROM `".$this->table."` ".$this->sorted;
if (!($result = $this->connection->query($sql))) {
return FALSE;
}
$rows = array();
while ($row = $result->fetch_assoc()) {
$rows[] = $row;
}
unset($this->sorted);
return $rows;
}
/**
* Pobranie danych w/g pól w bazie
*
* @param array $fields Zmienna deifniująca pola do wprowadzenia
* @param string $type Wartość łącznika
* @return array
* @author Aleksander Cynarski
**/
public function getRowsByFields($fields,$type="AND")
{
$sql = "SELECT * FROM `".$this->table."` WHERE ";
$sep = "";
foreach ($fields as $name => $value) {
$sql .= $sep;
$sql .= "`".$name."` = '".$value."' ";
$sep = " ".$type." ";
}
if($this->sorted != "")
{
$sql .= " ".$this->sorted;
}
if(__SQL_DEBUG__ == TRUE) echo $sql;
if (!($result = $this->connection->query($sql))) {
return FALSE;
}
$rows = array();
while ($row = $result->fetch_assoc()) {
$rows[] = $row;
}
unset($this->sorted);
return $rows;
}
/**
* Update wybranych krotek w bazie
*
* @param string $id Wartość pola indekusjącego dla rządanego wpisu w bazie
* @param array $fields Zmienna tablicowa definiująca pola i ich nowe wartości w bazie
* @return array
* @author Aleksander Cynarski
**/
public function setRow($id,$fields)
{
$list = "";
$separator = "";
foreach ($fields as $name => $value) {
$list .= $separator."`".$name."` = '".$value."'";
$separator = ", ";
}
$sql = "UPDATE `".$this->table."` SET ";
$sql .= $list." ";
$sql .= "WHERE ";
$sql .= "`".$this->id_field."` = '".$id."' ";
if(__SQL_DEBUG__ == TRUE) echo $sql;
if (!$this->connection->query($sql)) {
return FALSE;
}
return $this->connection->affected_rows;
}
/**
* Kasowanie rekordu z bazy danych
*
* @param string $id Wartość pola indeksu dla którego kasujemy wartość
* @return bool
* @author Aleksander Cynarski
**/
public function delRow($id)
{
$sql = "DELETE FROM `".$this->table."` WHERE ";
$sql .= "`".$this->id_field."` = '".$id."' ";
if(__SQL_DEBUG__ == TRUE) echo $sql;
if (!$this->connection->query($sql)) {
return FALSE;
}
return $this->connection->affected_rows;
}
}
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment