MySQL Linux sunucusuna PDO sürücüsünü kurma


102

Kısa bir süre önce, sorgularımı parametrelendirmek ve HTML'yi veritabanına güvenli bir şekilde kaydetmek için kodumu PDO kullanacak şekilde değiştirmem önerilmişti.

İşte ana sorunlar:

  1. Http://php.net/manual/en/ref.pdo-mysql.php'ye baktım ve bu $ ./configure --with-pdo-mysqldizeyi nereye koymam gerektiğini gerçekten anlayamıyorum ...

  2. Oluşturduğum site aslında yalnızca bir sayfa için PDO gerektiriyor. Yeniden yazmayı düşünsem de, biraz zaman alacak ve sayfaların yakında çalışmasına ihtiyacım var, bu yüzden MySQL'i tamamen kapatamıyorum. PDO kurarsam, yine de mysql_*işleyicileri kullanabilir miyim?

Söz konusu sunucu, PHP Sürüm 5.4.6-1ubuntu1 ve Apache / 2.2.22 (Ubuntu) çalıştırıyor. Ayrıca önemliyse bir phpMyAdmin veritabanı çalıştırıyorum.

Yanıtlar:


183

Ubuntu'da gerekli PDO parçalarını apt kullanarak kurabilmelisiniz. sudo apt-get install php5-mysql

PDO ile mysql_'nin aynı anda kullanılması arasında bir sınırlama yoktur. Bununla birlikte, DB'niz için biri mysql_ ve diğeri PDO kullanarak olmak üzere iki bağlantı oluşturmanız gerekecektir.


1
tamam, php.ini dosyama baktım ve varsayılan olarak etkinleştirilmiş pdo gibi görünüyor, yine de hem pdo hem de
mysql_

1
@ YuriCollector'sEditionRossi Bunun yanıtı güncellendi.
Jani Hartikainen

1
Değişikliklerin uygulanması için daha sonra apache'yi yeniden başlatmanız gerektiğini belirtmekte fayda var.
Adam F

1
@jonaspas ubuntu'daysanız, ile güncellemeyi deneyin ve sudo apt-get updateardından orijinal yüklemeyi yanıttan çalıştırın.
ryAn_Hdot

14
Teşekkürler ryAn_Hdot! Ama bu benim için de işe yaramadı. Şimdiki çözümüm: php7 çalıştırıyordum ve yapmak zorundaydımsudo apt-get install php-mysql
johnnydoe82

25

Bu güzel bir soru, ama okuduklarınızı yanlış anladığınızı düşünüyorum.

PDO'yu yükleyin

Bu ./config --with-pdo-mysql, yalnızca kendi PHP kodunuzu derlerseniz koymanız gereken bir şeydir . Paket yöneticileriyle kurarsanız, Jany Hartikainen tarafından verilen komut satırını kullanmanız yeterlidir: sudo apt-get install php5-mysqlve ayrıcasudo apt-get install pdo-mysql

Mysql_ ile uyumluluk

Mysql_'nin gerçekten cesareti kırılmış olmasının yanı sıra, ikisi de bağımsızdır. PDO kullanıyorsanız mysql_ dahil edilmez ve mysql_ kullanıyorsanız PDO gerekmez.

Kodunuzdaki herhangi bir satırı değiştirmeden PDO'yu kapatırsanız herhangi bir sorun yaşamazsınız. Ancak PDO ile bağlantı kurmaya ve sorgu yazmaya başladığınızdan beri, onu saklamanız ve mysql_'den vazgeçmeniz gerekiyor.

Birkaç yıl önce MySQL ekibi , MySQLi'ye geçmek için bir komut dosyası yayınladı . Özelleştirilebilir mi bilmiyorum ama resmi.


yani ikisini aynı anda kullanmak istersem her iki bağlantı yöntemini de kullanmak zorunda kalırım? Demek istediğim: şu anda çalışan 50 sayfam var, çok sayıda kodla, geliştirme bir yıl gibi sürdü ve sadece 1 sayfa için geri dönemem, zaten değil ... Yapmam gereken şey bu 50 sayfa olduğu gibi çalışıyor ve şimdi pdo kullanarak yazdığım bu sayfa mümkün mü? zaman ayırdığınız için teşekkürler ^^
Yuri Scarbaci

Yeniden düzenleme, çok fazla kod değiştirmeniz gerekiyorsa yararlı olabilir. Ama evet, ikisini birden kullanmak istiyorsan iki bağlantı kurmalısın.
artragis

kodumu neden yeniden saklamam için kolay bir şey var mı? Şu anda bir iş üzerinde çalışıyorum, kendi kendime başlamadım, başka bir programcı tarafından yapıldı ve şimdi onun koduna uyum sağlamalıyım ... Herkesin kendi tarzı olduğu için biraz zor, bu yüzden şimdilik olduğu gibi bırakmayı tercih ederim, çünkü bu yazılım şimdiye kadar sorunsuz olarak kullanıldı ... thx btw ^^ pdo birini açmadan önce mysql bağlantısını kapatmam gerekiyor mu yoksa her ikisini de şu adreste açtırabilirim: Aynı zaman? ^^
Yuri Scarbaci

1
belki netbeans veya eclipse gibi bir IDE kullanabilirsiniz
artragis


17

Temelde Jani Hartikainen'in cevabı doğru! Cevabını artırdım. Sistemimde eksik olan şey (Ubuntu 15.04'e göre) php.ini'mde PDO Uzantısını etkinleştirmek oldu

extension=pdo.so
extension=pdo_mysql.so

web sunucusunu yeniden başlatın (örn. "sudo service apache2 restart" ile) -> her ince :-)

Mevcut aktif php.ini dosyanızın nerede olduğunu bulmak için phpinfo () veya buradan başka ipuçlarını kullanabilirsiniz: https://www.ostraining.com/blog/coding/phpini-file/


Benim için çalıştı. Teşekkürler. +1
Marcel

1
Php.ini dosyamda bu satırlar yoktu. Sadece sahibim extension=pdo_mysql.dll, bu yüzden bunu yorumlamadım ve apache'yi yeniden başlattım ve işe yaradı.
user3494047

@ user3494047 Sanırım bir windows sistemindesiniz. Yapılandırma örneğini bir linux sisteminden aldım. Ama deneyimini paylaşman harika!
Tobias Gaertner

Aslında bu bir ubuntu
14.04

Teşekkürler! Bir düzine sudo apt-get install...komut çalıştırmış olmalıyım ve hiçbir şey işe yaramadı, sonunda bu iki satırı php.ini'ye ekledim. Sadece kaydettikten sonra çalıştırın o apache sunucu yeniden başlatma komutunu söz: sudo service apache2 restart. Ve php.ini dosya yolum şuydu /etc/php/7.0/apache2/php.ini(OS: Lubuntu 16.04, bu amaçlar için Ubuntu'ya benzer). sudo gedit <fullpath>Düzenlemek için çalıştırın . (sisteminizdeki gedit veya geany veya herhangi bir metin düzenleyici)
Nikhil VJ

11

İlk önce gerekli PDO parçalarını, sudo apt-get install php*-mysql* 5.6, 7.0, 7.1, 7.2 gibi php sürüm adı olan komutu çalıştırarak kurun. Kurulumdan sonra bu iki ifadeyi belirtmeniz gerekir (zaten varsa açıklamayı kaldırın)

extension=pdo.so
extension=pdo_mysql.so

.ini dosyanızda ve sunucunuzu komutla yeniden başlatın

sudo service apache2 restart

Bu cevap hiçbir yeni bilgi eklememektedir - bu yüzden faydası yoktur.
Tobias Gaertner

1
Bu yanıt son derece yardımcı oldu çünkü içinde PHP sürüm numarasına ihtiyacınız olduğunu belirtti php*-mysql. Ben çalışıyordum php-mysqlve php7-mysqldaha sonra boşuna ve bu cevap anlaşma imzalandı! Teşekkürler!
jedmao

Benim için çalıştı. Teşekkürler.
Mahir Altınkaya

@ MahirAltınkaya Gald, yardımcı oldu.
Avnish alok

9
  1. PDO, PHP Veri Nesnesi anlamına gelir.
  2. PDO_MYSQL, veri nesnesi (veritabanı) ile veri nesnenize, MySQL veritabanına erişen kullanıcı girdisi ("arka planda kod" olarak adlandırılan kullanıcı arabirimi altındaki bir katman) arasındaki arabirimi uygulayacak sürücüdür.

Bunu kullanmanın amacı, kullanıcı arayüzü ile veritabanı arasında ek bir güvenlik katmanı uygulamaktır. Bu katmanı kullanarak veriler, veri yapınıza eklenmeden önce normalleştirilebilir. (Başlıklar Başlıklardır, baştaki veya sondaki boşluklar yoktur, tüm tarihler uygun şekilde biçimlidir.)

Ancak bunun farkında olmayabileceğiniz birkaç nüans var.

Her şeyden önce, şimdiye kadar, muhtemelen tüm sorgularınızı URL'ye benzer bir şekilde yazmışsınızdır ve parametreleri URL'nin kendisini kullanarak iletiyorsunuz. PDO kullanılarak, tüm bunlar kullanıcı arabirimi düzeyinde yapılır. Kullanıcı arayüzü, topu sahaya taşıyan ve 7 noktalı TOUCHDOWN için veri tabanına yerleştiren PDO'ya teslim ediyor .. yedi puan alıyor, çünkü oraya ulaştı ve bilgiyi URL'den geçirmekten çok daha güvenli bir şekilde yaptı. .

Ayrıca, bir veri katmanı kullanarak sitenizi SQL enjeksiyonuna karşı da güçlendirebilirsiniz . Veritabanının kendisi ile konuşan TEK 'oyuncu' olan bu ara katmanı kullanarak, bunun nasıl daha güvenli olabileceğini görebileceğinizden eminim. Veri katmanından veritabanına, veri katmanından veritabanına, veri katmanından arabirime arabirim.

Ve:

Kodunuzu yazarken en iyi uygulamaları uygulayarak sonuçtan çok daha mutlu olacaksınız.

Ek kaynaklar:

Re: url php dot net / manual / en / ref nokta pdo-mysql dot php içindeki MySQL Fonksiyonları

Re: üç katmanlı mimari - uygulamalarınıza güvenlik ekleme https://blog.42.nl/articles/introducing-a-security-layer-in-your-application-architecture/

Re: UML kullanarak Nesneye Dayalı Tasarım Bu konuda gerçekten daha fazla bilgi edinmek istiyorsanız, bu piyasadaki en iyi kitaptır, Grady Booch UML http://dl.acm.org/citation.cfm?id=291167&CFID'nin babasıdır. = 241218549 & CFTOKEN = 82813028

Veya bitmonkey ile kontrol edin. Orada çok şey öğrenebileceğine emin olduğum bir grup var.

>

Terminolojinin gerçekte ne anlama geldiğini bilseydik, hiçbir şey öğrenmemize gerek kalmazdı.

>


0

MySQL ile bir CakePHP Docker Container'a ihtiyacınız varsa, bu amaçla bir Docker imajı oluşturdum! Kurulum konusunda endişelenmenize gerek yok. Sadece çalışıyor!

Ubuntu tabanlı görüntüye şu şekilde yükledim:

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

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

Uygulamanızı oluşturmak ve çalıştırmak sadece 2 adımlı bir işlemdir (uygulamanın mevcut dizininde olduğunuzu düşünürsek):

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

Herhangi birinin bunu zaten çalışan bir docker kapsayıcısıyla yapmaya çalışması durumunda: sudo /etc/init.d/apache2 restartapache sunucusunu yeniden başlatmak için gereklidir
MajorB breakfast
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.