سلام متاسفانه هرکاری میکنم این دستورات اجرا نمیشن و دادهها بعد از اینزرت از دیتابیس پاک نمیشن چیکار باس کنم اگه میشه راهنمایی کنید
سلام
کدی که نوشتید رو ارسال بفرمایید.
مهرداد سامی۰۵ اردیبهشت ۱۴۰۰، ۱۰:۲۳
این کدای مربوط به تست
<?php
namespace App\Tests;
use App\Database\PDODatabaseConnection;
use App\Database\PDOQueryBuilder;
use App\Helpers\Config;
use PHPUnit\Framework\TestCase;
class PDOQueryBuilderTest extends TestCase
{
private $queryBiulder;
public function setUp():void
{
$pdoConnection = new PDODatabaseConnection($this->getConfig());
$this->queryBiulder = new PDOQueryBuilder($pdoConnection->connect());
$this->queryBiulder->beginTransaction();
parent::setUp();
}
public function testItCanCreateData()
{
$result=$this->insertInToDb();
$this->assertIsInt($result);
$this->assertGreaterThan(0,$result);
}
public function testItCanUpdateData()
{
$this->insertInToDb();
$result = $this->queryBiulder
->table('bug')
->where('user', 'amir')
->update(['title' => 'first update title', 'email' => 'amir@gmail.com','link'=>'http://link-update.com']);
$this->assertEquals(1, $result);
}
/* public function testItCanDeleteRecord()
{
$this->insertInToDb();
$this->insertInToDb();
$this->insertInToDb();
$this->insertInToDb();
$result=$this->queryBiulder
->table('bug')
->where('user','amirrahmani')
->delete();
$this->assertEquals(4,$result);
}*/
private function insertInToDb()
{
$data = [
'title' => 'first bug tracker',
'link' => 'http://link.com',
'user' => 'amir',
'email' => 'amir7017@gmail.com'
];
return $this->queryBiulder->table('bug')->create($data);
}
private function getConfig()
{
return Config::get('database', 'pdo_testing');
}
public function tearDown():void
{
//$this->queryBiulder->truncateAllTable();
$this->queryBiulder->rollback();
parent::tearDown();
}
}
اینم کدای مربوط به کلاس pdoQuery
<?php
namespace App\Database;
use PDO;
class PDOQueryBuilder
{
protected $table;
protected $connection;
protected $conditions;
protected $values;
public function __construct(PDODatabaseConnection $connection)
{
$this->connection=$connection->getConnection();
}
public function table(string $table)
{
$this->table=$table;
return $this;
}
public function create(array $data)
{
$placeholder=[];
foreach ($data as $column=>$value):
$placeholder[]='?';
endforeach;
$placeholder=implode(',',$placeholder);
$fields=implode(',',array_keys($data));
$sql="INSERT INTO {$this->table} ({$fields}) VALUES ({$placeholder})";
$query=$this->connection->prepare($sql);
$query->execute(array_values($data));
return (int)$this->connection->lastInsertId();
}
public function where(string $cloumn,string $value)
{
$this->conditions[]="{$cloumn}=:$cloumn";//name=:name
$this->values[":{$cloumn}"]=$value;
return $this;
}
public function update(array $data):int
{
$fields=[];
foreach ($data as $column=>$value){
$fields[]="{$column}=:$column";
$this->values[":$column"]=strip_tags(htmlspecialchars($value));
}
$conditions=implode("and",$this->conditions);
$fields=implode(',',$fields);
$sql="UPDATE {$this->table} SET {$fields} WHERE {$conditions}";
$query=$this->connection->prepare($sql);
$query->execute($this->values);
return $query->rowcount();
}
public function delete()
{
$condition=implode('and',$this->conditions);
$sql="DELETE FROM {$this->table} WHERE {$condition}";
$query=$this->connection->prepare($sql);
$query->execute($this->values);
return $query->rowcount();
}
public function truncateAllTable()
{
$query=$this->connection->prepare("SHOW TABLES");
$query->execute();
foreach ($query->fetchAll(PDO::FETCH_COLUMN) as $table){
$this->connection->prepare("TRUNCATE TABLE `{$table}`")->execute();
}
}
public function beginTransaction()
{
$this->connection->beginTransaction();
}
public function rollback()
{
$this->connection->rollback();
}
}