عدم اجرا دستورات rollback , beginTransaction

پرسیده شده
فعالیت 1103 روز پیش
دیده شده 413 بار
0

سلام متاسفانه هرکاری میکنم این دستورات اجرا نمیشن و داده ها بعد از اینزرت از دیتابیس پاک نمیشن چیکار باس کنم اگه میشه راهنمایی کنید

فایل پیوست

امیر
امیر

5 اردیبهشت 00

0
حذف شده

مطمئن هستید که مثل ویدیو جلو رفتید؟

فایل پیوست

مهرداد سامی

توسط

مهرداد سامی

5 اردیبهشت 00

حذف شده
حل شد خیلی ممنون . مث اینکه باید Storage Engine تیبل های دیتابیس روی innoDB باشه تا کار کنه این دستورات برای من پیشفرض روی myISAM بود که گذاشتم روی innoDB درست شد.
امیر

5 اردیبهشت 00

0
حذف شده

سلام 

کدی که نوشتید رو ارسال بفرمایید.

فایل پیوست

مهرداد سامی

توسط

مهرداد سامی

5 اردیبهشت 00

حذف شده
باشه چشم، کد در کامنت بعدی تو همین صفحه ارسال کردم .
امیر

5 اردیبهشت 00

0
حذف شده

این کدای مربوط به تست

<?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' => '[email protected]','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' => '[email protected]'
        ];
        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();
    }
}
فایل پیوست

امیر

توسط

امیر

5 اردیبهشت 00

0
حذف شده

از چه دیتابیسی استفاده میکنید؟

فایل پیوست

مهرداد سامی

توسط

مهرداد سامی

5 اردیبهشت 00

حذف شده
mysql
امیر

5 اردیبهشت 00