Make a better database interactions

This commit is contained in:
Gregorio Chiko Putra 2017-08-31 15:09:43 +07:00
parent a075e1c36e
commit 031a188f5b
3 changed files with 24 additions and 18 deletions

View File

@ -30,6 +30,7 @@ class Post extends \Core\Model
if ($stmt = $db->query($sql)) {
$result = $stmt->fetchAll(\PDO::FETCH_ASSOC);
// For tests
return true;
}
return false;
@ -60,16 +61,16 @@ class Post extends \Core\Model
}
}
public function entry($fields, $vals)
public function entry($args)
{
if (count($fields) && count($vals) && count($fields) === count($vals)) {
$keys = '`'.implode('`, `', $fields).'`';
if (count($args)) {
$keys = '`'.implode('`, `', array_keys($args)).'`';
$x = 1;
$values = '';
foreach ($vals as $val) {
foreach ($args as $field) {
$values .= '?';
if ($x < count($vals)) {
if ($x < count($args)) {
$values .= ', ';
}
$x++;
@ -84,7 +85,7 @@ class Post extends \Core\Model
$x = 1;
foreach ($vals as $val) {
foreach ($args as $val) {
$query->bindValue($x, urldecode($val));
$x++;
}

View File

@ -5,20 +5,18 @@ use App\Config;
abstract class Model
{
protected static $dsn;
protected static $conn = null;
protected static function connectDB()
{
static $conn = null;
try {
if (!$conn) {
if (!self::$conn) {
$dsn = 'mysql:host='.Config::DB_HOST.';dbname='.Config::DB_DB;
$conn = new \PDO($dsn, Config::DB_UNAME, Config::DB_PWD);
self::$conn = new \PDO($dsn, Config::DB_UNAME, Config::DB_PWD);
$conn->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
self::$conn->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
}
return $conn;
return self::$conn;
} catch (PDOException $e) {
echo $e->getMessage();
}

View File

@ -7,18 +7,25 @@ class PostTest extends \PHPUnit\Framework\TestCase
*
* @test
*/
public function showDataSuccess()
public function databaseInteractionsSuccess()
{
$post = new Post();
$this->assertTrue($post->showAll());
$fields = ['category', 'expired_at', 'creator', 'content'];
$values = ['3', '2017-09-02', '2', 'barbarbarbarbarbarbar!'];
$args = [
'category' => 3,
'expired_at' => '2017-09-02',
'creator' => 2,
'content' => 'barbarbarbarbarbarbar!'
];
$this->assertTrue($post->entry($fields, $values));
$this->assertTrue($post->entry($args));
$args = ['category' => 5, 'content' => 'foofoofoofoo!'];
$args = [
'category' => 5,
'content' => 'foofoofoofoo!'
];
$this->assertTrue($post->update($args, 1));