2017-03-06 53 views
0

我想問問,如果和它是如何能夠使使用基於PHP的應用程序獨立於SQL引擎的?構建應用程序獨立的SQL引擎的使用

(在我的意思是,應用程序可以在PostgreSQL的,MySQL的執行,也許還是Oracle SQL)

目前的想法是離開PDO DSN到配置文件,從而使查詢等一切保持不變,但是我可以面對表格本身的CRUD操作時遇到一些問題嗎?

如果我不在其中添加任何複雜的東西,那麼是否有可能使它完全不依賴於引擎,只有PDO DSN用於數據庫,並且它可以在每個SQL引擎上以相同的方式查詢所有內容?

此致敬禮!

+2

如果你想成爲獨立的,你將不得不寫爲每個可能的發動機具有相同簽名的「DB驅動程序」。 – Jerodev

+1

使用原則或其他一些ORM。 – ShiraNai7

+1

根據每個SQL引擎將使用的不同方言,您將面臨一些問題。沒有一個完全標準的「SQL」語法是mySQL,Oracle和其他人共有的。所以我同意@ ShiraNai7,你最好不要重新發明weel。 –

回答

2

閱讀有關數據庫抽象層。 PHP中有相當多的庫可用。如果您選擇任何流行的框架,請參閱Symfony或Laravel - 您將擁有開箱即用的DBAL - 教義或雄辯。兩者都提供了類似的查詢構建功能,基於HQL的IMO。

絕對嘗試將它寫「自己的方式」。即使你只是簡單的查詢的文法是不同的,更何況只是類型,遞增等等

2

如果你堅持的是由所有的目標數據庫支持的SQL的一個共同的子集,那麼,你可以放棄使用相同的PDO實例,相同的查詢,並只需切換PDO DSN。然而

實事求是地講,任何東西,但最瑣碎的查詢,你可能會使用它,你必須執行稍有不同的數據庫,不同數據庫的一些特定功能。簡單地說,這意味着如果連接到MySQL,代碼將不得不執行查詢A,但如果連接到Postgres,則代碼將稍有不同。

你肯定不想使用大量的if..else來實現,而是你想要使用數據庫特定的適配器/驅動程序。在您的業務代碼中,您將調用$database->getUserRecords(),並根據$database是否使用MySQL或Postgres適配器,查詢會稍有不同。 (另見依賴注入

您可以通過實施由專人這些適配器和調整查詢每個數據庫做到這一點,或使用更抽象的ORM/DBAL可使用裝配在飛行正確的查詢特定於數據庫的查詢構建器。有很多現有的庫。