Trong chương đầu tiên của hướng dẫn PostgreSQL PHP, chúng tôi sẽ cung cấp các định nghĩa cần thiết. Chúng tôi sẽ chỉ cho bạn cách cài đặt cơ sở dữ liệu PostgreSQL và các gói cần thiết. Các ví dụ sẽ được chạy trên dòng lệnh bằng PHP CLI
Để chạy được các ví dụ chúng ta cần có ngôn ngữ PHP [dạng PHP CLI] và đã cài đặt cơ sở dữ liệu PostgreSQL. Chúng tôi cũng cần gói
$ sudo service postgresql start * Starting PostgreSQL 9.1 database server [ OK ]2
PostgreSQL là một hệ thống cơ sở dữ liệu quan hệ đối tượng mã nguồn mở mạnh mẽ. Nó là một hệ thống quản lý cơ sở dữ liệu đa người dùng. Nó chạy trên nhiều nền tảng bao gồm Linux, FreeBSD, Solaris, Microsoft Windows và Mac OS. PostgreSQL được phát triển bởi PostgreSQL Global Development Group
Thiết lập PostgreSQL
Chúng ta phải cài đặt cơ sở dữ liệu PostgreSQL
$ sudo apt-get install postgresql
Trên hệ thống dựa trên Debian, chúng ta có thể cài đặt cơ sở dữ liệu PostgreSQL bằng lệnh trên
$ 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
Nếu chúng ta cài đặt cơ sở dữ liệu PostgreSQL từ các gói, nó sẽ tự động được thêm vào tập lệnh khởi động của hệ điều hành. Nếu chúng ta chỉ học cách làm việc với cơ sở dữ liệu thì không cần thiết phải khởi động cơ sở dữ liệu mỗi khi chúng ta khởi động hệ thống. Lệnh trên xóa mọi liên kết khởi động hệ thống cho cơ sở dữ liệu PostgreSQL
$ /etc/init.d/postgresql status Running clusters: 9.1/main $ service postgresql status Running clusters: 9.1/main
Chúng tôi kiểm tra xem máy chủ PostgreSQL có đang chạy không. Nếu không, chúng ta cần khởi động máy chủ
$ sudo service postgresql start * Starting PostgreSQL 9.1 database server [ OK ]
Trên Ubuntu Linux, chúng ta có thể khởi động máy chủ bằng lệnh
$ sudo service postgresql start * Starting PostgreSQL 9.1 database server [ OK ]3
$ sudo service postgresql stop [sudo] password for janbodnar: * Stopping PostgreSQL 9.1 database server [ OK ]
Chúng tôi sử dụng lệnh
$ sudo service postgresql start * Starting PostgreSQL 9.1 database server [ OK ]4 để dừng máy chủ PostgreSQL________số 8
Chúng tôi tạo một vai trò mới trong hệ thống PostgreSQL. Chúng tôi cho phép nó có khả năng tạo cơ sở dữ liệu mới. Vai trò là người dùng trong thế giới cơ sở dữ liệu. Vai trò tách biệt với người dùng hệ điều hành. Chúng tôi đã tạo một người dùng mới mà không có tùy chọn
$ sudo service postgresql start * Starting PostgreSQL 9.1 database server [ OK ]5, e. g. chúng tôi chưa chỉ định mật khẩu. Điều này cho phép chúng tôi kết nối với cơ sở dữ liệu với người dùng này mà không cần xác thực mật khẩu. Lưu ý rằng điều này chỉ hoạt động trên localhost
$ sudo apt-get install postgresql0
Lệnh
$ sudo service postgresql start * Starting PostgreSQL 9.1 database server [ OK ]6 tạo cơ sở dữ liệu PostgreSQL mới với chủ sở hữu janbodnar
Ngôn ngữ PHP được biết là chạy trên máy chủ web. Nhưng nó cũng có thể được sử dụng trên dòng lệnh. PHP Command Line Interface [PHP CLI] là thư viện giúp lập trình viên có thể sử dụng PHP trên dòng lệnh. Với PHP CLI, chúng ta có thể xây dựng các ứng dụng GUI bằng PHP-GTK hoặc chúng ta có thể tạo các tập lệnh kiểm tra đơn giản. Trong hướng dẫn này, chúng ta sẽ kết nối với cơ sở dữ liệu PostgreSQL bằng trình thông dịch PHP dòng lệnh
$ sudo apt-get install postgresql2
Chúng tôi cài đặt mô-đun PHP CLI trên hệ thống Linux của chúng tôi
Gói php5-pssql
php5-pssql là một gói để làm việc với cơ sở dữ liệu PostgreSQL từ ngôn ngữ PHP. Trên các hệ thống khác, tên gói có thể khác
$ sudo apt-get install postgresql3
Chúng tôi khởi chạy lệnh trên để cài đặt gói
Chúng tôi có một nhận xét nhanh về xử lý lỗi trong PHP. PHP có hỗ trợ tích hợp để báo cáo lỗi. Các chi tiết cụ thể có thể được kiểm soát trong php. tập tin ini. Lưu ý rằng phiên bản PHP CLI có tệp INI riêng. Nó nằm ở
$ sudo service postgresql start * Starting PostgreSQL 9.1 database server [ OK ]7 trên hệ thống của chúng tôi
Chỉ thị
$ sudo service postgresql start * Starting PostgreSQL 9.1 database server [ OK ]8 kiểm soát xem các thông báo lỗi tích hợp có được hiển thị hay không. Trong môi trường phát triển, các thông báo lỗi này được hiển thị. Trong sản xuất, chúng bị đàn áp. Không có lý do gì để hiển thị các thông báo kỹ thuật này cho người dùng. Ngoài ra, nó còn tiềm ẩn nguy cơ bảo mật
Nói chung, chúng ta nên ghi các thông báo lỗi cụ thể hơn vào tệp nhật ký. Chỉ thị
$ sudo service postgresql start * Starting PostgreSQL 9.1 database server [ OK ]9 kiểm soát xem các lỗi có được ghi lại hay không.
$ sudo service postgresql stop [sudo] password for janbodnar: * Stopping PostgreSQL 9.1 database server [ OK ]0 chỉ định tên của tệp nơi các lỗi tập lệnh sẽ được ghi lại. Nếu nó không được đặt, mặc định là
$ sudo service postgresql stop [sudo] password for janbodnar: * Stopping PostgreSQL 9.1 database server [ OK ]1 cho PHP CLI
Hàm
$ sudo service postgresql stop [sudo] password for janbodnar: * Stopping PostgreSQL 9.1 database server [ OK ]2 nhận chuỗi thông báo lỗi cuối cùng của kết nối. Đó là thông báo lỗi tương tự được tạo trong báo cáo lỗi tích hợp
Trong các ví dụ của hướng dẫn này, chúng tôi không sử dụng hàm
$ sudo service postgresql stop [sudo] password for janbodnar: * Stopping PostgreSQL 9.1 database server [ OK ]2 vì nó sao chép các thông báo lỗi tích hợp. Chúng tôi có các cài đặt sau
$ 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/K21postgresql1
Chúng tôi hiển thị các lỗi tích hợp; . Các thông báo lỗi cũng được ghi vào một tệp nhật ký được chỉ định. Nếu chúng tôi không muốn thông báo lỗi trên bảng điều khiển, chúng tôi chỉ cần tắt lệnh display_errors
$ 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/K21postgresql0
Trong script, chúng ta sử dụng hàm
$ sudo service postgresql stop [sudo] password for janbodnar: * Stopping PostgreSQL 9.1 database server [ OK ]4 để hiển thị thông báo lỗi đơn giản, dễ hiểu. Các chi tiết cụ thể hơn được lưu vào tệp nhật ký. Hàm
$ sudo service postgresql stop [sudo] password for janbodnar: * Stopping PostgreSQL 9.1 database server [ OK ]4 cũng kết thúc tập lệnh
Phiên bản
Trong ví dụ mã đầu tiên, chúng ta sẽ lấy phiên bản của cơ sở dữ liệu PostgreSQL
Quảng cáo$ 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/K21postgresql1
Trong tập lệnh PHP ở trên, chúng tôi kết nối với cơ sở dữ liệu
$ sudo service postgresql stop [sudo] password for janbodnar: * Stopping PostgreSQL 9.1 database server [ OK ]6 đã tạo trước đó. Chúng tôi thực thi một câu lệnh SQL trả về phiên bản của cơ sở dữ liệu PostgreSQL
$ 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/K21postgresql2
Đây là các biến chuỗi kết nối. Để tạo kết nối đến cơ sở dữ liệu PostgreSQL, chúng tôi phải cung cấp tên máy chủ, tên người dùng và mật khẩu và tên cơ sở dữ liệu
$ 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/K21postgresql3
Chúng tôi kết nối với máy chủ cơ sở dữ liệu. Nếu không thể tạo kết nối, hàm
$ sudo service postgresql stop [sudo] password for janbodnar: * Stopping PostgreSQL 9.1 database server [ OK ]4 sẽ chấm dứt tập lệnh và in thông báo lỗi ra bàn điều khiển. Hàm
$ sudo service postgresql stop [sudo] password for janbodnar: * Stopping PostgreSQL 9.1 database server [ OK ]8 trả về tài nguyên kết nối, tài nguyên này sẽ được sử dụng sau này với các hàm mô-đun khác
$ 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/K21postgresql4
Câu lệnh SQL này chọn phiên bản của cơ sở dữ liệu PostgreSQL
$ 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/K21postgresql5
Truy vấn được thực hiện với hàm
$ sudo service postgresql stop [sudo] password for janbodnar: * Stopping PostgreSQL 9.1 database server [ OK ]9
$ 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/K21postgresql6
Chúng tôi lấy dữ liệu từ kết quả trả về
$ 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/K21postgresql7
Chúng tôi in dữ liệu mà chúng tôi đã lấy ra bàn điều khiển. Dữ liệu được trả về dưới dạng một mảng PHP. Phần tử đầu tiên của mảng là chuỗi chúng ta đang tìm kiếm
$ 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/K21postgresql8
Đóng kết nối với cơ sở dữ liệu bằng hàm
$ 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] n0
$ 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/K21postgresql9
Chạy phiên bản. tập lệnh php
Chúng tôi sẽ tạo một bảng ô tô và chèn một số hàng vào đó
$ 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/K21postgresql1
Đoạn script trên tạo một bảng
$ 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] n1 và chèn 8 hàng vào bảng
$ /etc/init.d/postgresql status Running clusters: 9.1/main $ service postgresql status Running clusters: 9.1/main1
Chúng tôi bỏ bảng ô tô nếu nó đã tồn tại. Hàm
$ sudo service postgresql stop [sudo] password for janbodnar: * Stopping PostgreSQL 9.1 database server [ OK ]9 thực hiện truy vấn đã cho trên kết nối cơ sở dữ liệu đã chỉ địnhQuảng cáo
$ /etc/init.d/postgresql status Running clusters: 9.1/main $ service postgresql status Running clusters: 9.1/main2
Câu lệnh SQL này tạo một bảng ô tô mới. Bảng có ba cột
$ /etc/init.d/postgresql status Running clusters: 9.1/main $ service postgresql status Running clusters: 9.1/main3
Chúng tôi đang chèn hai chiếc xe vào bàn
$ /etc/init.d/postgresql status Running clusters: 9.1/main $ service postgresql status Running clusters: 9.1/main4
Kết nối với cơ sở dữ liệu bị đóng
$ /etc/init.d/postgresql status Running clusters: 9.1/main $ service postgresql status Running clusters: 9.1/main5
Chúng tôi xác minh dữ liệu bằng văn bản bằng công cụ psql
báo cáo chuẩn bị
Bây giờ chúng ta sẽ quan tâm đến các tuyên bố đã chuẩn bị. Khi chúng tôi viết các câu lệnh đã chuẩn bị, chúng tôi sử dụng các trình giữ chỗ thay vì viết trực tiếp các giá trị vào các câu lệnh. Báo cáo được chuẩn bị tăng tính bảo mật và hiệu suất
quảng cáoMột câu lệnh đã chuẩn bị là một đối tượng phía máy chủ có thể được sử dụng để tối ưu hóa hiệu suất. Khi một truy vấn được chuẩn bị, nó được phân tích cú pháp, viết lại và lên kế hoạch. Sau đó, câu lệnh đã chuẩn bị chỉ cần được thực thi. Do đó, các giai đoạn phân tích cú pháp, viết lại và lập kế hoạch chỉ được thực hiện một lần, thay vì mỗi lần câu lệnh được thực thi. Các câu lệnh đã chuẩn bị chỉ tồn tại trong khoảng thời gian của phiên cơ sở dữ liệu hiện tại. Khi phiên kết thúc, câu lệnh đã chuẩn bị bị quên, vì vậy nó phải được tạo lại trước khi sử dụng lại
$ /etc/init.d/postgresql status Running clusters: 9.1/main $ service postgresql status Running clusters: 9.1/main6
Chúng tôi thêm một hàng vào bảng ô tô. Chúng tôi sử dụng một truy vấn đã chuẩn bị
$ /etc/init.d/postgresql status Running clusters: 9.1/main $ service postgresql status Running clusters: 9.1/main7
Chúng tôi có ba biến sẽ được sử dụng để tạo truy vấn. Những giá trị này có thể đến e. g. từ một mẫu web
$ /etc/init.d/postgresql status Running clusters: 9.1/main $ service postgresql status Running clusters: 9.1/main8
Đây là một truy vấn SQL với các trình giữ chỗ
$ 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] n3,
$ 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] n4 và
$ 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] n5. Các trình giữ chỗ sẽ được lấp đầy sau
$ /etc/init.d/postgresql status Running clusters: 9.1/main $ service postgresql status Running clusters: 9.1/main9
Ở đây chúng tôi chuẩn bị một truy vấn bằng cách gọi hàm
$ 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] n6. Tham số thứ hai của hàm là tên của câu lệnh đã chuẩn bị. Nó phải là duy nhất cho mỗi kết nối. Các câu lệnh đã chuẩn bị nhanh hơn và bảo vệ chống lại các cuộc tấn công SQL injection
$ sudo service postgresql start * Starting PostgreSQL 9.1 database server [ OK ]0
Hàm
$ 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] n7 gửi yêu cầu thực thi câu lệnh đã chuẩn bị với các tham số đã cho và chờ kết quả. Các giá trị được liên kết với trình giữ chỗ