Last active
September 26, 2015 06:38
-
-
Save paramah/1055938 to your computer and use it in GitHub Desktop.
simple DB in PHP
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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