<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智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # PostgreSQL PHP 編程簡介 > 原文: [http://zetcode.com/db/postgresqlphp/intro/](http://zetcode.com/db/postgresqlphp/intro/) 在 PostgreSQL PHP 教程的第一章中,我們將提供必要的定義。 我們將展示如何安裝 PostgreSQL 數據庫和所需的包。 這些示例將使用 PHP CLI 在命令行上運行。 為了運行示例,我們需要安裝 PHP 語言(以 PHP CLI 的形式)和 PostgreSQL 數據庫。 我們還需要`php5-psql`包。 ## 關于 PostgreSQL 數據庫 PostgreSQL 是一個功能強大的開源對象關系數據庫系統。 它是一個多用戶數據庫管理系統。 它可以在多種平臺上運行,包括 Linux,FreeBSD,Solaris,Microsoft Windows 和 Mac OS。 PostgreSQL 由 PostgreSQL 全球開發小組開發。 ## 設置 PostgreSQL 我們必須安裝 PostgreSQL 數據庫。 ```php $ sudo apt-get install postgresql ``` 在基于 Debian 的系統上,我們可以使用上述命令安裝 PostgreSQL 數據庫。 ```php $ sudo update-rc.d -f postgresql remove Removing any system startup links for /etc/init.d/postgresql ... /etc/rc0.d/K21postgresql /etc/rc1.d/K21postgresql /etc/rc2.d/S19postgresql /etc/rc3.d/S19postgresql /etc/rc4.d/S19postgresql /etc/rc5.d/S19postgresql /etc/rc6.d/K21postgresql ``` 如果我們從包中安裝 PostgreSQL 數據庫,它將自動添加到操作系統的啟動腳本中。 如果我們僅學習使用數據庫,則不必在每次引導系統時都啟動數據庫。 上面的命令刪除 PostgreSQL 數據庫的所有系統啟動鏈接。 ```php $ /etc/init.d/postgresql status Running clusters: 9.1/main $ service postgresql status Running clusters: 9.1/main ``` 我們檢查 PostgreSQL 服務器是否正在運行。 如果沒有,我們需要啟動服務器。 ```php $ sudo service postgresql start * Starting PostgreSQL 9.1 database server [ OK ] ``` 在 Ubuntu Linux 上,我們可以使用`service postgresql start`命令啟動服務器。 ```php $ sudo service postgresql stop [sudo] password for janbodnar: * Stopping PostgreSQL 9.1 database server [ OK ] ``` 我們使用`service postgresql stop`命令停止 PostgreSQL 服務器。 ```php $ sudo -u postgres createuser janbodnar Shall the new role be a superuser? (y/n) n Shall the new role be allowed to create databases? (y/n) y Shall the new role be allowed to create more new roles? (y/n) n ``` 我們在 PostgreSQL 系統中創建了一個新角色。 我們允許它具有創建新數據庫的能力。 角色是數據庫世界中的用戶。 角色與操作系統用戶是分開的。 我們創建了一個沒有`-W`選項的新用戶,例如我們尚未指定密碼。 這使我們能夠使用該用戶連接到數據庫,而無需密碼驗證。 請注意,這僅適用于本地主機。 ```php $ sudo -u postgres createdb testdb -O janbodnar ``` `createdb`命令使用所有者 janbodnar 創建一個新的 PostgreSQL 數據庫。 ## PHP CLI 已知 PHP 語言可在 Web 服務器上運行。 但是它也可以在命令行上使用。 PHP 命令行界面(PHP CLI)是一個庫,使程序員可以在命令行上使用 PHP。 使用 PHP CLI,我們可以使用 PHP-GTK 構建 GUI 應用,也可以創建簡單的測試腳本。 在本教程中,我們將使用命令行 PHP 解釋器連接到 PostgreSQL 數據庫。 ```php $ sudo apt-get install php5-cli ``` 我們在 Linux 系統上安裝 PHP CLI 模塊。 ## php5-pgsql 包 _php5-pgsql_ 是一個使用 PHP 語言與 PostgreSQL 數據庫一起使用的包。 在其他系統上,包名稱可能不同。 ```php $ sudo apt-get install php5-pgsql ``` 我們啟動以上命令來安裝包。 ## 處理錯誤 我們對處理 PHP 中的錯誤有一個簡短的評論。 PHP 具有對錯誤報告的內置支持。 細節可以在`php.ini`文件中控制。 請注意,PHP CLI 版本具有單獨的 INI 文件。 它位于我們系統上的`/etc/php5/cli/php.ini`中。 `display_errors`指令控制是否顯示內置錯誤消息。 在開發環境中,將顯示這些錯誤消息。 在生產中,它們被抑制了。 沒有理由向用戶顯示這些技術消息。 另外,這是潛在的安全風險。 通常,我們應該將更具體的錯誤消息記錄到日志文件中。 `log_errors`指令控制是否記錄錯誤。 `error_log`指定應該記錄腳本錯誤的文件的名稱。 如果未設置,則默認為 PHP CLI 的`stderr`。 `pg_last_error()`函數獲取連接的最后一條錯誤消息字符串。 它與內置錯誤報告中生成的錯誤消息相同。 在本教程的示例中,我們不使用`pg_last_error()`函數,因為它復制了內置錯誤消息。 我們有以下設置: ```php ... display_errors = On ... log_errors = On ; Our own custom based log file error_log = /home/janbodnar/.phpcli_log ... ``` 我們顯示內置錯誤; 它們顯示在命令行上。 錯誤消息還將記錄到指定的日志文件中。 如果我們不想在控制臺上顯示錯誤消息,只需關閉`display_errors`指令即可。 ```php $rs = pg_query($con, $query) or die("Cannot execute query: $query\n"); ``` 在腳本中,我們使用`die()`函數顯示一條簡單的錯誤消息,該消息易于理解。 更具體的詳細信息將保存到日志文件中。 `die()`函數也會終止腳本。 ## 版本 在第一個代碼示例中,我們將獲取 PostgreSQL 數據庫的版本。 ```php <?php $host = "localhost"; $user = "user12"; $pass = "34klq*"; $db = "testdb"; $con = pg_connect("host=$host dbname=$db user=$user password=$pass") or die ("Could not connect to server\n"); $query = "SELECT VERSION()"; $rs = pg_query($con, $query) or die("Cannot execute query: $query\n"); $row = pg_fetch_row($rs); echo $row[0] . "\n"; pg_close($con); ?> ``` 在上面的 PHP 腳本中,我們連接到先前創建的`testdb`數據庫。 我們執行一條 SQL 語句,該語句返回 PostgreSQL 數據庫的版本。 ```php $host = "localhost"; $user = "user12"; $pass = "34klq*"; $db = "testdb"; ``` 這些是連接字符串變量。 要創建到 PostgreSQL 數據庫的連接,我們必須提供主機名,用戶名和密碼以及數據庫名。 ```php $con = pg_connect("host=$host dbname=$db user=$user password=$pass") or die ("Could not connect to server\n"); ``` 我們連接到數據庫服務器。 如果無法創建連接,則`die()`函數將終止腳本并將錯誤消息打印到控制臺。 `pg_connect()`函數返回連接資源,該資源將在以后與其他模塊功能一起使用。 ```php $query = "SELECT VERSION()"; ``` 該 SQL 語句選擇 PostgreSQL 數據庫的版本。 ```php $rs = pg_query($con, $query) or die("Cannot execute query: $query\n"); ``` 使用`pg_query()`函數執行查詢。 ```php $row = pg_fetch_row($rs); ``` 我們從返回的結果中獲取數據。 ```php echo $row[0] . "\n"; ``` 我們將檢索到的數據打印到控制臺。 數據以 PHP 數組的形式返回。 數組的第一個元素是我們要查找的字符串。 ```php pg_close($con); ``` 使用`pg_close()`函數關閉與數據庫的連接。 ```php $ php version.php PostgreSQL 9.1.3 on i686-pc-linux-gnu, compiled by gcc-4.6.real (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1, 32-bit ``` 運行`version.php`腳本。 ## 插入數據 我們將創建一個`cars`表并在其中插入幾行。 ```php <?php $host = "localhost"; $user = "user12"; $pass = "34klq*"; $db = "testdb"; $con = pg_connect("host=$host dbname=$db user=$user password=$pass") or die ("Could not connect to server\n"); $query = "DROP TABLE IF EXISTS cars"; pg_query($con, $query) or die("Cannot execute query: $query\n"); $query = "CREATE TABLE cars(id INTEGER PRIMARY KEY, mame VARCHAR(25), price INT)"; pg_query($con, $query) or die("Cannot execute query: $query\n"); $query = "INSERT INTO cars VALUES(1,'Audi',52642)"; pg_query($con, $query) or die("Cannot execute query: $query\n"); $query = "INSERT INTO cars VALUES(2,'Mercedes',57127)"; pg_query($con, $query) or die("Cannot execute query: $query\n"); $query = "INSERT INTO cars VALUES(3,'Skoda',9000)"; pg_query($con, $query) or die("Cannot execute query: $query\n"); $query = "INSERT INTO cars VALUES(4,'Volvo',29000)"; pg_query($con, $query) or die("Cannot execute query: $query\n"); $query = "INSERT INTO cars VALUES(5,'Bentley',350000)"; pg_query($con, $query) or die("Cannot execute query: $query\n"); $query = "INSERT INTO cars VALUES(6,'Citroen',21000)"; pg_query($con, $query) or die("Cannot execute query: $query\n"); $query = "INSERT INTO cars VALUES(7,'Hummer',41400)"; pg_query($con, $query) or die("Cannot execute query: $query\n"); $query = "INSERT INTO cars VALUES(8,'Volkswagen',21606)"; pg_query($con, $query) or die("Cannot execute query: $query\n"); pg_close($con); ?> ``` 上面的腳本創建一個`Cars`表,并將 8 行插入到該表中。 ```php $query = "DROP TABLE IF EXISTS cars"; pg_query($con, $query) or die("Cannot execute query: $query\n"); ``` 如果汽車表已經存在,我們將其刪除。 `pg_query()`函數在指定的數據庫連接上執行給定查詢。 ```php $query = "CREATE TABLE cars(id INTEGER PRIMARY KEY, mame VARCHAR(25), price INT)"; ``` 該 SQL 語句創建一個新的 cars 表。 該表有三列。 ```php $query = "INSERT INTO cars VALUES(1,'Audi',52642)"; pg_query($con, $query) or die("Cannot execute query: $query\n"); $query = "INSERT INTO cars VALUES(2,'Mercedes',57127)"; pg_query($con, $query) or die("Cannot execute query: $query\n"); ``` 我們要把兩輛車插入表。 ```php pg_close($con); ``` 與數據庫的連接已關閉。 ```php $ psql testdb psql (9.1.3) Type "help" for help. testdb=# SELECT * FROM cars; id | name | price ----+------------+-------- 1 | Audi | 52642 2 | Mercedes | 57127 3 | Skoda | 9000 4 | Volvo | 29000 5 | Bentley | 350000 6 | Citroen | 21000 7 | Hummer | 41400 8 | Volkswagen | 21606 9 | BMW | 36000 (9 rows) ``` 我們使用`psql`工具驗證寫入的數據。 ## 預備語句 現在,我們將以預備語句來關注自己。 在編寫預備語句時,我們使用占位符,而不是直接將值寫入語句中。 預準備的語句可提高安全性和性能。 預備語句是可用于優化性能的服務器端對象。 準備查詢后,將對其進行解析,重寫和計劃。 以后只需要執行預備語句。 因此,解析,重寫和計劃階段僅執行一次,而不是每次執行語句時。 準備的語句僅在當前數據庫會話期間持續。 會話結束時,預備語句將被遺忘,因此必須在重新使用之前重新創建它。 ```php $host = "localhost"; $user = "user12"; $pass = "34klq*"; $db = "testdb"; $id = 9; $name = "BMW"; $price = 36000; $con = pg_connect("host=$host dbname=$db user=$user password=$pass") or die ("Could not connect to server\n"); $query = "INSERT INTO cars VALUES($1, $2, $3)"; pg_prepare($con, "prepare1", $query) or die ("Cannot prepare statement\n"); pg_execute($con, "prepare1", array($id, $name, $price)) or die ("Cannot execute statement\n"); echo "Row successfully inserted\n"; pg_close($con); ``` 我們向汽車表添加一行。 我們使用預備查詢。 ```php $id = 9; $name = "BMW"; $price = 36000; ``` 我們有三個變量將用于構建查詢。 這些值可以例如來自網絡表單。 ```php $query = "INSERT INTO cars VALUES($1, $2, $3)"; ``` 這是帶有`$1`,`$2`和`$3`占位符的 SQL 查詢。 占位符將在以后填充。 ```php pg_prepare($con, "prepare1", $query) or die ("Cannot prepare statement\n"); ``` 在這里,我們通過調用`pg_prepare()`函數準備查詢。 函數的第二個參數是預備語句的名稱。 每個連接必須唯一。 預備語句更快,并且可以防止 SQL 注入攻擊。 ```php pg_execute($con, "prepare1", array($id, $name, $price)) or die ("Cannot execute statement\n"); ``` `pg_execute()`函數發送一個請求,以執行帶有給定參數的預備語句,并等待結果。 這些值綁定到占位符。 ```php $ php prepared.php Row successfully inserted testdb=# SELECT * FROM cars; id | name | price ----+------------+-------- 1 | Audi | 52642 2 | Mercedes | 57127 3 | Skoda | 9000 4 | Volvo | 29000 5 | Bentley | 350000 6 | Citroen | 21000 7 | Hummer | 41400 8 | Volkswagen | 21606 9 | BMW | 36000 (9 rows) ``` 我們在表上放了一輛新車。 ## 數據來源 創建本教程時,請參考 [PostgreSQL PHP 手冊](http://www.php.net/manual/en/book.pgsql.php)和 [PostgreSQL 文檔](http://www.postgresql.org/docs/9.1/interactive/index.html)。 這是 PostgreSQL PHP 教程的介紹性章節。
                  <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>

                              哎呀哎呀视频在线观看