<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # Doctrine 幾乎可以這么說,所有的Web應用都不可避免地要和數據庫打交道。 在“上古時代”,我們習慣于用`mysql_connect()`這樣的語句來連接數據庫,`mysql_fetch_array()`這樣的語句來獲得數據。但是這些已經是過時的、不再推薦反而要被禁止的做法。即使我們不使用任何框架而編寫一些快速的測試代碼,我們也應該避免使用這些語句,而至少使用[PDO](http://php.net/manual/zh/book.pdo.php)或者[MySQLi](http://php.net/manual/zh/book.mysqli.php)中提供的API。 但是在這一層次之上,我們還有所謂的ORM (Object-relational mapping,對象-關系映射)。 什么是ORM?簡單的說,操作數據庫的一個最直截了當的方式,是直接使用類似`select * from a_table`這樣的語句來選擇數據,用`update a_table set field1=value1, field2=value2 where...`這樣的語句來更新數據…… 這樣做當然也行。但是有很多問題: 1. 不安全。SQL注入最容易發生在這種類型的語句中。 2. 麻煩。每次都要從數據庫中獲取一堆數據,然后根據用途分配給不同的變量。反過來也是一樣,要根據不同的變量(可能是通過計算,或者是用戶通過表單提交)來構造一個SQL語句從而使得數據、信息得到存續(persistent)。 鑒于此,ORM的目的就是能讓我們用處理對象的方式來處理表中的數據。創建一個對象,用`$obj->setField1()`的方式來為對象的屬性賦值,然后用類似`$obj->save()`這樣的方式保存這個對象到數據庫中[1](https://taylorr.gitbooks.io/building-a-web-site-with-symfony/content/02.02%20doctrine.html#fn_1),對象的屬性映射到表格的字段。 在獲取數據時,返回的記錄也能自動映射到一個對象(或者對象數組),于是我們就可以用類似`$obj->getField1()`的方式來獲得記錄的字段值。 + 這是非常直觀、非常高效、同時也非常安全的做法。 Symfony 2中使用的ORM是[Doctrine](http://www.doctrine-project.org/)。對這個ORM的詳細解說已經超出了本書的范圍。我們在后面的章節中會結合實際使用介紹在SF中使用Doctrine的方法。 Doctrine是SF中缺省使用的ORM。在我們[創建一個新的SF應用](https://taylorr.gitbooks.io/building-a-web-site-with-symfony/content/05%20app%20creation.md)時,Doctrine是缺省安裝的。 由于本應用已經開發到了6.0版本,筆者對應用結構也有了全新的布局,所以在該版本的應用中,M模塊其實已經不再存在,而改用RESTful API調用的方式。所以本教程中對Doctrine的描述近乎為0——因為幾乎沒有用到[2](https://taylorr.gitbooks.io/building-a-web-site-with-symfony/content/02.02%20doctrine.html#fn_2)!即便是在API接口的開發中,我們也沒有用到Doctrine(因為Silex并不支持ORM)而用了更低層的DBAL(DataBase Abstraction Layer)操作。 注意:在任何情形下都不推薦使用`mysql_connect`等已經過時并馬上要被淘汰、而且極不安全的語句! > 1. SF中使用的Doctrine在保存對象時不是用的這樣的語法,但是這不妨礙我們的理解。[??](https://taylorr.gitbooks.io/building-a-web-site-with-symfony/content/02.02%20doctrine.html#reffn_1 "Jump back to footnote [1] in the text.") > 2. 在[建立數據庫實體](https://taylorr.gitbooks.io/building-a-web-site-with-symfony/content/05.04%20entity.html)和[樣本數據](https://taylorr.gitbooks.io/building-a-web-site-with-symfony/content/05.05%20fixture.html)這兩節中,我們還會用到Doctrine來為我們目前這個還沒有任何數據的數據庫填充樣本數據。但是,從嚴格意義上說,這不是應用編程本身的一部分,因為樣本數據只有在測試的時候才會用到。[??](https://taylorr.gitbooks.io/building-a-web-site-with-symfony/content/02.02%20doctrine.html#reffn_2 "Jump back to footnote [2] in the text.")
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看