f1 = $f1; $this->f2 = $f2; } } interface T1DatabaseAccess { public function get_one($f2); public function get_all(); public function put($o); public function remove($f1); } class T1DatabaseAccessMysqli implements T1DatabaseAccess { private $server; private $username; private $password; private $database; public function __construct($server, $username, $password, $database) { $this->server = $server; $this->username = $username; $this->password = $password; $this->database = $database; } private function get_connection() { // connect to server and select database $con = new mysqli($this->server, $this->username, $this->password, $this->database); if(mysqli_connect_errno()) { die(mysqli_connect_error()); } // return connection (note: no globals) return $con; } public function get_one($f2) { // connect to server and select database $con = $this->get_connection(); // prepare SQL statement $stmt = $con->prepare('SELECT F1,F2 FROM T1 WHERE F2=?') or die(mysqli_error($con)); // bind input $stmt->bind_param('s', $f2); // execute $stmt->execute() or die(mysqli_error($con)); $rs = $stmt->get_result(); // get first row and field F1 if($row = $rs->fetch_array(MYSQLI_ASSOC)) { $res = new T1($row['F1'], $row['F2']); } else { die("$f2 not found"); } // close statement $stmt->close(); // close connection to server $con->close(); // return value return $res; } public function get_all() { // connect to server and select database $con = $this->get_connection(); // prepare SQL statement $stmt = $con->prepare('SELECT F1,F2 FROM T1') or die(mysqli_error($con)); // execute $stmt->execute() or die(mysqli_error($con)); $rs = $stmt->get_result(); // create array to contain rows $res = array(); // get all rows while($row = $rs->fetch_array(MYSQLI_ASSOC)) { $res[] = new T1($row['F1'], $row['F2']); } // close statement $stmt->close(); // close connection to server $con->close(); // return array with rows return $res; } public function put($o) { // connect to server and select database $con = $this->get_connection(); // prepare SQL statement $stmt = $con->prepare('INSERT INTO T1(F1,F2) VALUES(?,?)') or die(mysqli_error($con)); // bind input $stmt->bind_param('is', $o->f1, $o->f2); // execute $stmt->execute() or die(mysqli_error($con)); // close statement $stmt->close(); // close connection to server $con->close(); } public function remove($f1) { // connect to server and select database $con = $this->get_connection(); // prepare SQL statement $stmt = $con->prepare('DELETE FROM T1 WHERE F1=?') or die(mysqli_error($con)); // bind input $stmt->bind_param('i', $f1); // execute $stmt->execute() or die(mysqli_error($con)); // close statement $stmt->close(); // close connection to server $con->close(); } } class T1DatabaseAccessFactory { const MYSQLI = 'mysqli'; public static function get_database_access($id, $server, $username, $password, $database) { if($id === T1DatabaseAccessFactory::MYSQLI) { return new T1DatabaseAccessMysqli($server, $username, $password, $database); } else { throw new Exception("Unknown T1DatabaseAccess id: $id"); } } } interface T1Presenter { public function display($data); } class T1PresenterHtmlTable implements T1Presenter { public function display($data) { $rows = ""; foreach($data as $row) { $f1 = $row->f1; $f2 = $row->f2; $rows .= sprintf("
F1 | \r\nF2 | \r\n
---|