Menginstal driver PDO di server MySQL Linux

102

Saya disarankan, belum lama ini, untuk mengubah kode saya untuk menggunakan PDO untuk mengatur parameter kueri saya dan menyimpan HTML dengan aman di database.

Nah, inilah masalah utamanya:

  1. Saya melihat http://php.net/manual/en/ref.pdo-mysql.php , dan saya tidak benar-benar mengerti di mana saya harus meletakkan $ ./configure --with-pdo-mysqlstring itu ...

  2. Situs yang saya bangun sebenarnya hanya membutuhkan PDO untuk satu halaman. Meskipun saya mungkin mempertimbangkan untuk menulis ulang, ini akan memakan waktu cukup lama dan saya ingin halaman segera berjalan, jadi saya tidak dapat mematikan MySQL sepenuhnya. Jika saya menginstal PDO, apakah saya masih dapat menggunakan mysql_*penangan?

Server yang dimaksud menjalankan PHP Versi 5.4.6-1ubuntu1 dan Apache / 2.2.22 (Ubuntu). Saya juga menjalankan database phpMyAdmin, jika itu penting.

Yuri Scarbaci
sumber

Jawaban:

183

Di Ubuntu Anda harus dapat menginstal bagian PDO yang diperlukan dari apt using sudo apt-get install php5-mysql

Tidak ada batasan antara menggunakan PDO dan mysql_ secara bersamaan. Namun Anda perlu membuat dua koneksi ke DB Anda, satu dengan mysql_ dan satu lagi menggunakan PDO.

Jani Hartikainen
sumber
1
oke, saya mencari di file php.ini saya dan sepertinya pdo di diaktifkan secara default, saya masih perlu tahu apakah saya dapat menggunakan penangan pdo dan mysql_ * ...
Yuri Scarbaci
1
@ YuriCollector'sEditionRossi Memperbarui jawaban untuk itu.
Jani Hartikainen
1
Perlu disebutkan bahwa Anda perlu memulai ulang apache setelah itu agar perubahan diterapkan.
Adam F
1
@jonaspas jika Anda menggunakan ubuntu, coba perbarui dengan sudo apt-get updatekemudian jalankan penginstalan asli dari jawabannya.
ryAn_Hdot
14
Terima kasih ryAn_Hdot! Tapi itu juga tidak berhasil untukku. Solusi saya sekarang: Saya menjalankan php7 dan saya harus melakukannyasudo apt-get install php-mysql
johnnydoe82
25

Itu pertanyaan yang bagus, tapi saya pikir Anda hanya salah paham dengan apa yang Anda baca.

Pasang PDO

Ini ./config --with-pdo-mysqladalah sesuatu yang harus Anda pakai hanya jika Anda mengkompilasi kode PHP Anda sendiri. Jika Anda menginstalnya dengan manajer paket, Anda hanya perlu menggunakan baris perintah yang diberikan oleh Jany Hartikainen: sudo apt-get install php5-mysqldan jugasudo apt-get install pdo-mysql

Kompatibilitas dengan mysql_

Terlepas dari kenyataan bahwa mysql_ benar-benar tidak disarankan, mereka berdua independen. Jika Anda menggunakan PDO mysql_ tidak terlibat, dan jika Anda menggunakan mysql_ PDO tidak diperlukan.

Jika Anda mematikan PDO tanpa mengubah baris apa pun dalam kode Anda, Anda tidak akan mendapat masalah. Tetapi sejak Anda mulai menghubungkan dan menulis query dengan PDO, Anda harus menyimpannya dan melepaskan mysql_.

Beberapa tahun yang lalu tim MySQL menerbitkan skrip untuk bermigrasi ke MySQLi . Saya tidak tahu apakah itu dapat disesuaikan, tetapi ini resmi.

artragis
sumber
jadi jika saya ingin menggunakan keduanya pada saat yang sama saya harus menggunakan kedua metode koneksi? yang saya maksud adalah: saya memiliki 50 halaman yang sudah berjalan, dengan banyak kode, butuh waktu satu tahun untuk berkembang dan saya tidak bisa kembali hanya untuk 1 halaman, tidak sekarang ... yang perlu saya lakukan adalah sudahkah 50 halaman itu berjalan sebagaimana adanya, dan satu halaman yang saya tulis sekarang menggunakan pdo, apakah mungkin? terima kasih atas waktunya ^^
Yuri Scarbaci
refactoring dapat berguna jika Anda harus mengubah banyak kode. Tapi ya, jika Anda ingin menggunakan keduanya, Anda harus membuat dua koneksi.
artragis
apakah ada alasan mudah untuk memfaktorkan ulang kode saya? Saat ini saya sedang mengerjakan pekerjaan yang tidak saya mulai sendiri, dikerjakan oleh programmer lain yang meninggalkannya, dan sekarang saya harus beradaptasi dengan kodenya ... agak kasar karena setiap orang memiliki gayanya sendiri, jadi saya lebih suka membiarkannya seperti itu untuk saat ini, karena perangkat lunak ini digunakan sampai sekarang tanpa masalah ... thx btw ^^ apakah saya perlu menutup koneksi mysql sebelum membuka pdo satu, atau saya dapat membuka keduanya di waktu yang sama? ^^
Yuri Scarbaci
1
mungkin Anda dapat menggunakan IDE seperti netbeans atau eclipse
artragis
1
Saya menemukan skrip yang memungkinkan Anda untuk bermigrasi ke mysqli, dan mungkin ke PDO
artragis
17

Pada dasarnya jawaban dari Jani Hartikainen benar! Saya memuji jawabannya. Apa yang hilang di sistem saya (berdasarkan Ubuntu 15.04) adalah mengaktifkan Ekstensi PDO di php.ini saya

extension=pdo.so
extension=pdo_mysql.so

restart webserver (misalnya dengan "sudo service apache2 restart") -> setiap baik-baik saja :-)

Untuk menemukan di mana file php.ini aktif Anda saat ini berada, Anda dapat menggunakan phpinfo () atau beberapa petunjuk lain dari sini: https://www.ostraining.com/blog/coding/phpini-file/

Tobias Gaertner
sumber
Bekerja untuk saya. Terima kasih. +1
Marcel
1
Saya tidak memiliki baris ini di file php.ini saya. Saya hanya punya extension=pdo_mysql.dll, jadi saya menghapus komentar itu dan memulai kembali apache dan berhasil.
pengguna3494047
@ user3494047 Saya rasa Anda menggunakan sistem windows. Saya mengambil contoh konfigurasi dari sistem linux. Tapi senangnya Anda membagikan pengalaman Anda!
Tobias Gaertner
Sebenarnya ini adalah ubuntu 14.04
user3494047
Terima kasih! Saya harus menjalankan selusin sudo apt-get install...perintah dan tidak ada yang berhasil, akhirnya menambahkan dua baris ini ke php.ini berhasil. Hanya menyebutkan server apache perintah restart yang Anda jalankan setelah menyimpan: sudo service apache2 restart. Dan jalur file php.ini saya adalah /etc/php/7.0/apache2/php.ini(OS: Lubuntu 16.04, analog dengan Ubuntu untuk tujuan ini). Jalankan sudo gedit <fullpath>untuk mengeditnya. (gedit atau geany atau editor teks apa pun di sistem Anda)
Nikhil VJ
10

Pertama instal bagian PDO yang diperlukan dengan menjalankan perintah di sudo apt-get install php*-mysqlmana * adalah nama versi php seperti 5.6, 7.0, 7.1, 7.2 Setelah instalasi Anda perlu menyebutkan (hapus komentar jika sudah ada) kedua pernyataan ini

extension=pdo.so
extension=pdo_mysql.so

di file .ini Anda dan mulai ulang server Anda dengan perintah

sudo service apache2 restart
Avnish alok
sumber
Jawaban ini tidak menambahkan informasi baru - jadi ini tidak berguna.
Tobias Gaertner
1
Jawaban ini sangat membantu karena menunjukkan bahwa Anda memerlukan nomor versi PHP php*-mysql. Saya mencoba php-mysqldan php7-mysqltidak berhasil dan kemudian jawaban ini menutup kesepakatan! Terima kasih!
jedmao
Bekerja untuk saya. Terima kasih.
Mahir Altınkaya
@ MahirAltınkaya Gald, itu membantu.
Avnish alok
8
  1. PDO adalah singkatan dari PHP Data Object.
  2. PDO_MYSQL adalah driver yang akan mengimplementasikan antarmuka antara objek data (database) dan input pengguna (lapisan di bawah antarmuka pengguna yang disebut "kode di belakang") mengakses objek data Anda, database MySQL.

Tujuan penggunaan ini adalah untuk mengimplementasikan lapisan keamanan tambahan antara antarmuka pengguna dan database. Dengan menggunakan lapisan ini, data dapat dinormalisasi sebelum dimasukkan ke dalam struktur data Anda. (Kapital adalah Kapital, tanpa spasi di depan atau di belakang, semua tanggal dalam format yang benar.)

Tetapi ada beberapa nuansa yang mungkin tidak Anda sadari.

Pertama-tama, sampai sekarang, Anda mungkin telah menulis semua kueri Anda dalam sesuatu yang mirip dengan URL, dan Anda meneruskan parameter menggunakan URL itu sendiri. Menggunakan PDO, semua ini dilakukan di bawah level antarmuka pengguna. Antarmuka pengguna menyerahkan bola ke PDO yang membawanya ke lapangan dan menanamnya ke dalam database untuk TOUCHDOWN 7 poin .. dia mendapat tujuh poin, karena dia mendapatkannya di sana dan melakukannya jauh lebih aman daripada meneruskan informasi melalui URL .

Anda juga dapat memperkuat situs Anda ke injeksi SQL dengan menggunakan lapisan data. Dengan menggunakan lapisan perantara ini yaitu HANYA 'pemain' yang berbicara ke database itu sendiri, saya yakin Anda dapat melihat bagaimana ini bisa jauh lebih aman. Antarmuka ke datalayer ke database, datalayer ke database ke datalayer ke antarmuka.

Dan:

Dengan menerapkan praktik terbaik saat menulis kode Anda, Anda akan jauh lebih bahagia dengan hasilnya.

Sumber tambahan:

Re: Fungsi MySQL di url php dot net / manual / en / ref dot pdo-mysql dot php

Perihal: arsitektur tiga tingkat - menambahkan keamanan ke aplikasi Anda https://blog.42.nl/articles/introducing-a-security-layer-in-your-application-architecture/

Perihal: Desain Berorientasi Objek menggunakan UML Jika Anda benar-benar ingin mempelajari lebih lanjut tentang ini, ini adalah buku terbaik di pasaran, Grady Booch adalah bapak UML http://dl.acm.org/citation.cfm?id=291167&CFID = 241218549 & CFTOKEN = 82813028

Atau periksa dengan bitmonkey. Ada kelompok di sana yang saya yakin Anda bisa belajar banyak.

>

Jika kita tahu apa arti sebenarnya dari terminologi itu, kita tidak perlu mempelajari apa pun.

>

Elaine Ossipov
sumber
0

Jika Anda membutuhkan CakePHP Docker Container dengan MySQL, saya telah membuat image Docker untuk tujuan itu! Tidak perlu khawatir tentang pengaturannya. Ini berhasil!

Begini cara saya menginstal di image berbasis 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

Membangun dan menjalankan aplikasi Anda hanyalah proses 2 langkah (mengingat Anda berada di direktori aplikasi saat ini):

$ docker build -t myCakePhpApp .
$ docker run -ti myCakePhpApp
Marcello de Sales
sumber
Jika ada yang mencoba melakukan ini dengan container docker yang sudah berjalan: sudo /etc/init.d/apache2 restartdiperlukan untuk me-restart server apache
MajorBreakfast