Cài đặt trình điều khiển PDO trên máy chủ MySQL Linux


102

Cách đây không lâu, tôi đã được đề xuất thay đổi mã của mình để sử dụng PDO nhằm tham số hóa các truy vấn của mình và lưu HTML một cách an toàn trong cơ sở dữ liệu.

Đây là những vấn đề chính:

  1. Tôi đã xem http://php.net/manual/en/ref.pdo-mysql.php và tôi thực sự không hiểu mình nên đặt $ ./configure --with-pdo-mysqlchuỗi đó ở đâu ...

  2. Trang web tôi đang xây dựng chỉ yêu cầu PDO cho một trang. Mặc dù tôi có thể cân nhắc viết lại nó, nhưng sẽ mất một lúc và tôi cần các trang chạy sớm, vì vậy tôi không thể tắt MySQL hoàn toàn. Nếu tôi cài đặt PDO, tôi vẫn có thể sử dụng mysql_*trình xử lý chứ?

Máy chủ được đề cập đang chạy Phiên bản PHP 5.4.6-1ubuntu1 và Apache / 2.2.22 (Ubuntu). Tôi cũng đang chạy cơ sở dữ liệu phpMyAdmin, nếu nó quan trọng.

Câu trả lời:


183

Trên Ubuntu, bạn sẽ có thể cài đặt các phần PDO cần thiết từ apt bằng cách sử dụng sudo apt-get install php5-mysql

Không có giới hạn nào giữa việc sử dụng đồng thời PDO và mysql_. Tuy nhiên, bạn sẽ cần tạo hai kết nối đến DB của mình, một với mysql_ và một bằng PDO.


1
okay, tôi ngẩng đầu lên trong file php.ini của tôi và nó trông giống như PDO trong kích hoạt theo mặc định, tôi vẫn cần phải biết nếu tôi có thể sử dụng cả hai PDO và mysql_ * xử lý ...
Yuri Scarbaci

1
@ YuriCollector'sEditionRossi Đã cập nhật câu trả lời cho điều đó.
Jani Hartikainen 14/11/12

1
Điều đáng nói là bạn cần phải khởi động lại apache sau đó để áp dụng các thay đổi.
Adam F

1
@jonaspas nếu bạn đang sử dụng ubuntu, hãy thử cập nhật với sudo apt-get updatesau đó chạy cài đặt gốc từ câu trả lời.
ryAn_Hdot

14
Cảm ơn ryAn_Hdot! Nhưng điều đó cũng không hiệu quả với tôi. Giải pháp của tôi bây giờ: Tôi đã chạy php7 và tôi đã phải làmsudo apt-get install php-mysql
johnnydoe82

25

Đó là một câu hỏi hay, nhưng tôi nghĩ bạn chỉ hiểu sai những gì bạn đọc.

Cài đặt PDO

Đây ./config --with-pdo-mysqllà thứ bạn phải đặt vào chỉ khi bạn biên dịch mã PHP của riêng mình. Nếu bạn cài đặt nó với trình quản lý gói, bạn chỉ cần sử dụng dòng lệnh do Jany Hartikainen đưa ra: sudo apt-get install php5-mysqlvà cảsudo apt-get install pdo-mysql

Khả năng tương thích với mysql_

Ngoài thực tế mysql_ thực sự không được khuyến khích, cả hai đều độc lập. Nếu bạn sử dụng PDO thì mysql_ không bị ám chỉ, còn nếu bạn sử dụng mysql_ thì không cần PDO.

Nếu bạn tắt PDO mà không thay đổi bất kỳ dòng nào trong mã của mình, bạn sẽ không gặp vấn đề gì. Nhưng kể từ khi bạn bắt đầu kết nối và viết các truy vấn với PDO, bạn phải giữ nó và từ bỏ mysql_.

Vài năm trước, nhóm MySQL đã xuất bản một tập lệnh để chuyển sang MySQLi . Tôi không biết nếu nó có thể được tùy chỉnh, nhưng nó chính thức.


vì vậy nếu tôi muốn sử dụng cả hai cùng một lúc, tôi sẽ phải sử dụng cả hai phương thức kết nối? ý tôi là: tôi có khoảng 50 trang đã chạy, với rất nhiều mã, phải mất một năm để phát triển và tôi không thể quay lại chỉ vì 1 trang, không phải bây giờ ... điều tôi cần làm là 50 trang đó có chạy như cũ không, và trang này tôi đang viết bây giờ bằng pdo, liệu nó có khả thi không? cảm ơn vì đã dành thời gian của bạn ^^
Yuri Scarbaci 14/11/12

tái cấu trúc có thể hữu ích nếu bạn phải thay đổi nhiều mã. Nhưng có, nếu bạn muốn sử dụng cả hai, bạn phải thiết lập hai kết nối.
artragis 14/11/12

có lý do dễ dàng để cấu trúc lại mã của tôi không? Tôi hiện đang làm một công việc mà tôi không tự bắt đầu, nó được thực hiện bởi một lập trình viên khác nhưng tôi đã bỏ dở, và bây giờ tôi phải thích nghi với mã của anh ấy ... hơi khắc nghiệt vì mọi người đều có phong cách riêng của mình, vì vậy tôi thà để nó như hiện tại, vì phần mềm này đã được sử dụng cho đến bây giờ mà không có vấn đề gì ... thx btw ^^ tôi có cần phải đóng kết nối mysql trước khi mở pdo không, hoặc tôi có thể mở cả hai lúc cùng lúc? ^^
Yuri Scarbaci 14/11/12

1
có lẽ bạn có thể sử dụng một IDE như netbeans hoặc eclipse
artragis 14/11/12

1
Tôi tìm thấy một kịch bản cho phép bạn di chuyển đến mysqli, và có lẽ để PDO
artragis

17

Về cơ bản câu trả lời từ Jani Hartikainen là đúng! Tôi ủng hộ câu trả lời của anh ấy. Điều còn thiếu trên hệ thống của tôi (dựa trên Ubuntu 15.04) là bật Tiện ích mở rộng PDO trong php.ini của tôi

extension=pdo.so
extension=pdo_mysql.so

khởi động lại máy chủ web (ví dụ: với "sudo service apache2 restart") -> mọi thứ đều tốt :-)

Để tìm vị trí tệp php.ini đang hoạt động hiện tại của bạn, bạn có thể sử dụng phpinfo () hoặc một số gợi ý khác từ đây: https://www.ostraining.com/blog/coding/phpini-file/


Đã làm cho tôi. Cảm ơn. +1
Marcel

1
Tôi không có những dòng này trong tệp php.ini của mình. Tôi chỉ có extension=pdo_mysql.dll, vì vậy tôi đã bỏ ghi chú điều đó và khởi động lại apache và nó hoạt động.
user3494047

@ user3494047 Tôi đoán bạn đang sử dụng hệ thống windows. Tôi đã khai quật cấu hình từ một hệ thống linux. Nhưng tuyệt vời là bạn đã chia sẻ kinh nghiệm của mình!
Tobias Gaertner

Trên thực tế, nó là một ubuntu 14.04
user3494047 12/12/16

Cảm ơn! Tôi phải chạy hàng tá sudo apt-get install...lệnh và không có gì hoạt động, cuối cùng việc thêm hai dòng này vào php.ini đã làm được. Chỉ cần nhắc đến máy chủ apache restart lệnh mà bạn chạy sau khi tiết kiệm: sudo service apache2 restart. Và đường dẫn tệp php.ini của tôi là /etc/php/7.0/apache2/php.ini(Hệ điều hành: Lubuntu 16.04, tương tự như Ubuntu cho những mục đích này). Chạy sudo gedit <fullpath>để chỉnh sửa nó. (gedit hoặc geany hoặc bất kỳ trình soạn thảo văn bản nào trên hệ thống của bạn)
Nikhil VJ

10

Lúc đầu, cài đặt các phần PDO cần thiết bằng cách chạy lệnh sudo apt-get install php*-mysqltrong đó * là tên phiên bản của php như 5.6, 7.0, 7.1, 7.2 Sau khi cài đặt, bạn cần đề cập (bỏ ghi chú nếu đã có) hai câu lệnh này

extension=pdo.so
extension=pdo_mysql.so

trong tệp .ini của bạn và khởi động lại máy chủ của bạn bằng lệnh

sudo service apache2 restart

Câu trả lời này không thêm thông tin mới - vì vậy imo của nó không hữu ích.
Tobias Gaertner

1
Câu trả lời này cực kỳ hữu ích vì nó chỉ ra rằng bạn cần số phiên bản PHP php*-mysql. Tôi đã cố gắng php-mysqlphp7-mysqlkhông có kết quả và sau đó câu trả lời này kín thỏa thuận! Cảm ơn!
jedmao

Đã làm cho tôi. Cảm ơn.
Mahir Altınkaya

@ MahirAltınkaya Gald, nó đã giúp.
Avnish alok

8
  1. PDO là viết tắt của PHP Data Object.
  2. PDO_MYSQL là trình điều khiển sẽ triển khai giao diện giữa dataobject (cơ sở dữ liệu) và đầu vào của người dùng (một lớp trong giao diện người dùng được gọi là "mã phía sau") truy cập đối tượng dữ liệu của bạn, cơ sở dữ liệu MySQL.

Mục đích của việc sử dụng này là thực hiện một lớp bảo mật bổ sung giữa giao diện người dùng và cơ sở dữ liệu. Bằng cách sử dụng lớp này, dữ liệu có thể được chuẩn hóa trước khi được chèn vào cấu trúc dữ liệu của bạn. (Viết hoa là Viết hoa, không có dấu cách ở đầu hoặc cuối, tất cả các ngày đều được định dạng đúng.)

Nhưng có một số sắc thái của điều này mà bạn có thể không biết.

Trước hết, cho đến nay, bạn có thể đã viết tất cả các truy vấn của mình bằng một thứ gì đó tương tự như URL và bạn chuyển các tham số bằng chính URL đó. Sử dụng PDO, tất cả điều này được thực hiện ở cấp độ giao diện người dùng. Giao diện người dùng đưa quả bóng cho PDO, nơi mang nó xuống sân và đưa nó vào cơ sở dữ liệu với 7 điểm CẢM ỨNG .. anh ta nhận được bảy điểm, bởi vì anh ta có nó ở đó và làm rất an toàn hơn là chuyển thông tin qua URL .

Bạn cũng có thể làm cứng trang web của mình với SQL injection bằng cách sử dụng lớp dữ liệu. Bằng cách sử dụng lớp trung gian này là 'người chơi' DUY NHẤT tự nói chuyện với cơ sở dữ liệu, tôi chắc rằng bạn có thể thấy cách này có thể an toàn hơn nhiều. Giao diện với datalayer với cơ sở dữ liệu, datalayer với cơ sở dữ liệu đến datalayer với giao diện.

Và:

Bằng cách thực hiện các phương pháp hay nhất trong khi viết mã, bạn sẽ thấy vui hơn nhiều với kết quả.

Nguồn bổ sung:

Re: Các chức năng của MySQL trong url php dot net / manual / en / ref dot pdo-mysql dot php

Re: kiến ​​trúc ba tầng - thêm bảo mật cho các ứng dụng của bạn https://blog.42.nl/articles/introductioning-a-security-layer-in-your-application-architecture/

Re: Thiết kế hướng đối tượng sử dụng UML Nếu bạn thực sự muốn tìm hiểu thêm về điều này, đây là cuốn sách hay nhất trên thị trường, Grady Booch là cha đẻ của UML http://dl.acm.org/citation.cfm?id=291167&CFID = 241218549 & CFTOKEN = 82813028

Hoặc kiểm tra bằng bitmonkey. Có một nhóm ở đó mà tôi chắc rằng bạn có thể học hỏi được nhiều điều.

>

Nếu chúng ta biết thuật ngữ này thực sự có nghĩa là gì, chúng ta sẽ không cần phải học bất cứ điều gì.

>


0

Nếu bạn cần một Vùng chứa Docker CakePHP với MySQL, tôi đã tạo một hình ảnh Docker cho mục đích đó! Không cần phải lo lắng về việc thiết lập nó. Nó chỉ hoạt động!

Đây là cách tôi cài đặt trong hình ảnh dựa trên Ubuntu:

https://github.com/marcellodesales/php-apache-mysql-4-cakephp-docker/blob/master/Dockerfile#L8

RUN docker-php-ext-install mysql mysqli pdo pdo_mysql

Xây dựng và chạy ứng dụng của bạn chỉ là một quy trình gồm 2 bước (coi như bạn đang ở trong thư mục hiện tại của ứng dụng):

$ docker build -t myCakePhpApp .
$ docker run -ti myCakePhpApp

Trong trường hợp bất kỳ ai cố gắng thực hiện việc này với một vùng chứa sudo /etc/init.d/apache2 restart
docker
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.