Php hỗ trợ kết nối postgresql như thế nào?

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 postgresql
0

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 postgresql
2

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 postgresql
3

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/K21postgresql
1

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/K21postgresql
0

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/K21postgresql
1

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/K21postgresql
2

Đâ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/K21postgresql
3

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/K21postgresql
4

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/K21postgresql
5

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/K21postgresql
6

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/K21postgresql
7

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/K21postgresql
8

Đó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) n
0

$ 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
9

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/K21postgresql
1

Đ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) n
1 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/main 
1

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ỉ định

Quảng cáo
$ /etc/init.d/postgresql status
Running clusters: 9.1/main

$ service postgresql status
Running clusters: 9.1/main 
2

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/main 
3

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/main 
4

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/main 
5

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áo

Mộ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/main 
6

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/main 
7

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/main 
8

Đâ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) n
3,
$ 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
4 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) n
5. 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/main 
9

Ở đâ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) n
6. 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) n
7 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ỗ

PHP hỗ trợ kết nối PostgreSQL như thế nào?

tệp php cần được thực thi từ trình duyệt tại http. //máy chủ cục bộ/thử nghiệm. php. Như bạn có thể thấy, việc tương tác với cơ sở dữ liệu từ bên trong PHP khá đơn giản bằng cách sử dụng pg_connect() . Nếu nỗ lực kết nối không thành công, hàm pg_connect() sẽ trả về false.

Làm cách nào tôi có thể kết nối cơ sở dữ liệu PostgreSQL bằng PHP?

Sử dụng mã PHP sau để kết nối với PostgreSQL và chọn cơ sở dữ liệu. Thay thế tên người dùng bằng tên người dùng, mật khẩu bằng mật khẩu của bạn và dbname bằng tên cơ sở dữ liệu.

Có thể sử dụng PHP với PostgreSQL không?

PHP cung cấp nhiều hàm để làm việc trực tiếp với cơ sở dữ liệu PostgreSQL . Dưới đây là một số chức năng. pg_connect. Hàm được sử dụng để mở kết nối PostgreSQL.

Kết nối PostgreSQL hoạt động như thế nào?

PostgreSQL triển khai mô hình máy khách/máy chủ “quy trình trên mỗi người dùng”. Trong mô hình này, mọi quy trình máy khách kết nối với chính xác một quy trình phụ trợ . Vì chúng tôi không biết trước có bao nhiêu kết nối sẽ được thực hiện, nên chúng tôi phải sử dụng “quy trình giám sát” để tạo ra một quy trình phụ trợ mới mỗi khi có yêu cầu kết nối.