MySQL LinuxサーバーへのPDOドライバーのインストール


102

私のクエリをパラメーター化し、HTMLをデータベースに安全に保存するために、コードをPDOを使用するように変更するよう提案されました。

さて、ここに主な問題があります:

  1. 私はhttp://php.net/manual/en/ref.pdo-mysql.phpを調べましたが、その$ ./configure --with-pdo-mysql文字列をどこに置くべきか本当にわかりません...

  2. 私が構築しているサイトでは、実際には1ページのPDOのみが必要です。私はそれを書き直すことを検討するかもしれませんが、しばらく時間がかかり、ページをすぐに実行する必要があるため、MySQLを完全にオフにすることはできません。PDOをインストールしても、mysql_*ハンドラーを使用できますか?

問題のサーバーは、PHPバージョン5.4.6-1ubuntu1およびApache / 2.2.22(Ubuntu)を実行しています。必要に応じて、phpMyAdminデータベースも実行しています。

回答:


182

Ubuntuでは、aptを使用して必要なPDOパーツをインストールできるはずです sudo apt-get install php5-mysql

PDOとmysql_を同時に使用することに制限はありません。ただし、DBへの接続を2つ作成する必要があります。1つはmysql_を使用し、もう1つはPDOを使用します。


1
わかりました。php.iniファイルを検索したところ、デフォルトでpdoが有効になっているようですが、pdoとmysql_ * handlersの両方を使用できるかどうかを知る必要があります...
Yuri Scarbaci

1
@ YuriCollector'sEditionRossiその回答を更新しました。
Jani Hartikainen

1
変更を適用するには、後でApacheを再起動する必要があることに言及する価値があります。
アダムF

1
@jonaspas ubuntuを使用している場合は、で更新してsudo apt-get updateから、回答から元のインストールを実行してください。
ryAn_Hdot 2016年

14
ありがとうryAn_Hdot!しかし、それでもうまくいきませんでした。私の解決策:私はphp7を実行していて、実行しなければなりませんsudo apt-get install php-mysql
でした

25

いい質問ですが、読んだ内容を誤解しているだけだと思います。

PDOをインストールする

これ./config --with-pdo-mysqlは、独自のPHPコードをコンパイルする場合にのみ適用する必要があります。あなたは、パッケージマネージャでそれをインストールする場合は、あなただけJany Hartikainenによって与えられたコマンドラインを使用する必要がありますsudo apt-get install php5-mysqlし、また、sudo apt-get install pdo-mysql

mysql_との互換性

mysql_が本当に推奨されないという事実は別として、どちらも独立しています。PDOを使用する場合、mysql_は関係ありません。mysql_を使用する場合、PDOは必要ありません。

コードの行を変更せずにPDOをオフにしても、問題はありません。しかし、PDOを使用してクエリを接続および記述し始めたので、それを維持してmysql_をあきらめる必要があります。

数年前、MySQLチームはMySQLi移行するためのスクリプトを公開しました。カスタマイズできるかどうかはわかりませんが、公式のものです。


両方を同時に使用したい場合は、両方の接続方法を使用する必要がありますか?つまり、すでに50ページのようなコードが大量に実行されているので、開発に1年ほどかかったので、1ページだけに戻すことはできず、とにかく今はできません...これらの50ページはそのまま実行されていますが、この1ページは現在pdoを使用して書いていますが、それも可能ですか?お時間をいただきありがとう
ござい

多くのコードを変更する必要がある場合、リファクタリングは役立ちます。しかし、はい、両方を使用したい場合は、2つの接続を確立する必要があります。
artragis

コードをリファクタリングする簡単な理由はありますか?私は現在、自分で始めなかった作業に取り組んでいます。それは、別のプログラマーがそれをやめたので、彼のコードに適応する必要があります...誰もが独自のスタイルを持っているので、少し厳しいですが、このソフトウェアは今まで問題なく使用されていたので、今のところそのままにしておきます... thx btw ^^ pdoを開く前にmysql接続を閉じる必要があります。または、両方を開くことができます同時に?^^
Yuri Scarbaci

1
おそらく、netbeansやeclipseなどのIDEを使用できます
artragis

1
mysqli、そしておそらくPDOへの移行を可能にするスクリプトを見つけました
artragis

17

基本的には、Jani Hartikainenの答えが正しいです。私は彼の答えに賛成した。私のシステム(Ubuntu 15.04ベース)で欠けていたのは、php.iniでPDO拡張機能を有効にすることでした。

extension=pdo.so
extension=pdo_mysql.so

ウェブサーバーを再起動します(例: "sudo service apache2 restart"を使用)->すべての罰金:-)

現在アクティブなphp.iniファイルの場所を見つけるには、phpinfo()またはここから他のヒントを使用できます:https : //www.ostraining.com/blog/coding/phpini-file/


私のために働いた。ありがとう。+1
マルセル

1
php.iniファイルにこれらの行がありませんでした。私はしか持っていないのでextension=pdo_mysql.dll、コメントを外してapacheを再起動すると動作しました。
user3494047 16

@ user3494047私はあなたがwindowsシステムを使っていると思います。私は、Linuxシステムから構成の例を取り上げました。しかし、あなたがあなたの経験を共有したことは素晴らしいことです!
Tobias Gaertner、2016

実際には、ubuntu 14.04
user3494047

ありがとう!私はダースのsudo apt-get install...コマンドを実行したに違いありませんでしたが、最終的にこれらの2行をphp.iniに追加するとうまくいきました。保存後に実行するapacheサーバーの再起動コマンドに言及するだけですsudo service apache2 restart。そして、私のphp.iniファイルのパスは/etc/php/7.0/apache2/php.ini(OS:Lubuntu 16.04、これらの目的でUbuntuに似ています)でした。実行sudo gedit <fullpath>して編集します。(gedit、geany、またはシステム上の任意のテキストエディタ)
Nikhil VJ

10

最初に、コマンドを実行して必要なPDOパーツをインストールします。sudo apt-get install php*-mysqlここで、*は5.6、7.0、7.1、7.2のようなphpのバージョン名です。インストール後、これらの2つのステートメントについて言及する必要があります(すでにそこにある場合はコメント解除します)。

extension=pdo.so
extension=pdo_mysql.so

.iniファイルで、コマンドでサーバーを再起動します

sudo service apache2 restart

この答えは新しい情報を追加しません-したがって、そのimoは役に立ちません。
Tobias Gaertner、2018年

1
この回答は非常に役に立ちました。PHPのバージョン番号が必要なことを示しているからですphp*-mysql。私がしようとしていたphp-mysqlし、php7-mysql無駄にしてから、この答えは契約を密封されました!ありがとう!
jedmao

私のために働いた。ありがとう。
MahirAltınkaya19年

@MahirAltınkayaGald、助かった。
Avnish alok

8
  1. PDOはPHPデータオブジェクトの略です。
  2. PDO_MYSQLは、データオブジェクト(データベース)と、MySQLデータベースにアクセスするデータオブジェクトにアクセスするユーザー入力(「コードビハインド」と呼ばれるユーザーインターフェースの下のレイヤー)間のインターフェースを実装するドライバーです。

これを使用する目的は、ユーザーインターフェイスとデータベースの間にセキュリティの追加レイヤーを実装することです。このレイヤーを使用すると、データをデータ構造に挿入する前に正規化できます。(大文字は大文字で、先頭または末尾にスペースはありません。日付はすべて正しい形式です。)

しかし、あなたが気付かないかもしれない、これにはいくつかのニュアンスがあります。

まず、これまでは、すべてのクエリをURLに似たもので記述し、URL自体を使用してパラメーターを渡していました。PDOを使用すると、これらすべてがユーザーインターフェイスレベルで行われます。ユーザーインターフェイスは、ボールをPDOに渡します。PDOはそれをフィールドに運び、データベースに7ポイントのタッチダウンのために植えます。彼は7ポイントを獲得しました。それは、そこに到達し、URLを介して情報を渡すよりもはるかに安全なためです。 。

データレイヤーを使用して、SQLインジェクションに対してサイトを強化することもできます。データベース自体と通信する唯一の「プレーヤー」であるこの中間層を使用することで、これがはるかに安全になる方法がわかると思います。データレイヤーとデータベース、データレイヤーとデータベース、データレイヤーとのインターフェース。

そして:

コードを記述しながらベストプラクティスを実装することにより、結果に満足することができます。

追加のソース:

Re:URL phpのMySQL関数dot net / manual / en / ref dot pdo-mysql dot php

Re:3層アーキテクチャ-アプリケーションにセキュリティを追加する https://blog.42.nl/articles/introducing-a-security-layer-in-your-application-architecture/

Re:UMLを使用したオブジェクト指向設計これについてもっと学びたい場合、これは市場で最高の本です。GradyBoochはUMLの父でした http://dl.acm.org/citation.cfm?id=291167&CFIDの = 241218549&CFTOKEN = 82813028

またはbitmonkeyで確認してください。たくさんのことを学べると思います。

>

用語が本当に意味するところを知っていれば、何も学ぶ必要はありません。

>


0

MySQLでCakePHP Dockerコンテナが必要な場合は、その目的のためにDockerイメージを作成しました。設定について心配する必要はありません。うまくいきます!

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

アプリケーションのビルドと実行は、2ステップのプロセスです(アプリケーションの現在のディレクトリにいることを考慮してください)。

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

既に実行中のDockerコンテナーを使用してこれを実行しようとした場合: sudo /etc/init.d/apache2 restartApacheサーバーを再起動するために必要です
MajorBreakfast
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.