Fatal error: Uncaught exception ‘PDOException’ with message ‘SQLSTATE[HY000]: General error: 1615 Prepared statement needs to be re-prepared

Standard

Merhaba Arkadaşlar,

Eğer projenizde PDO kullanıyorsanız lokalde herşey yolunda iken yayına verdiğinizde veri tabanında oluşturduğunuz view leri kullanırken aşağıdaki hatayı almış olabilirsiniz.

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 1615 Prepared statement needs to be re-prepared...

Bu hata bazen MySQL sürüm uyumsuzluğundan da kaynaklanıyor olsa bile PDO kullananlar için kesin çözüm ATTR_EMULATE_PREPARES true değeri ile birlikte attribute şeklinde eklemelisiniz. Kullanım şekilleriniz farklı olabilir. Eğer ayarlarınızı bir array ile tutuyorsanız 1. seçenek size geliyor. 


'options' => [
\PDO::ATTR_EMULATE_PREPARES => true
]

Eğer doğrudan attribute ekleme yapıyorsanız aşağıdaki şekilde satırı contstruct’a PDO tanımları bloğuna ekleyebilirsinz.

$this->db->setAttribute(PDO::ATTR_EMULATE_PREPARES, true);

XAMPP yeni güvenlik konsepti (new security consept) Erişim Yasak Hatası

Standard

Merhaba Arkadaşlar;

Xampp 7.2.6 sürümünde local phpmyadmin ekranına erişim esnasında karşılaştığım bu sorunu aşağıdaki şekilde çözümledim. Diğer sürümlerinde benzer bir durumu yaşamamıştım. Dolayısı ile aynı sorun diğer sürümlerde de var mı yok mu bilemiyorum.

1 – /lamp/etc/extra/httpd-xampp.conf dosyasını bir editörde açarak aşağıdaki bloğu bulun.

<Directory "/opt/lampp/phpmyadmin">
AllowOverride AuthConfig Limit
Require local
ErrorDocument 403 /error/XAMPP_FORBIDDEN.html.var
</Directory>

2 – Bu bloğu aşağıdaki şekilde değiştirin.

<Directory "/opt/lampp/phpmyadmin">
AllowOverride AuthConfig Limit
Order allow,deny
Allow from all
Require all granted

</Directory>


3 – Apahce servisini restart ettiğinizde sorun giderilmiş olacaktır.

Local makinanızda MariaDB için “Can’t init tc log” çözümü

Standard

Merhaba Arkadaşlar;

Yaşadığım bir sorunu internette araştırırken bulduğum çözümü sizinle paylaşmak istedim. Lokalimde Mac üzerinde xampp kullanıyorum. MySQL server Can’t init tc log çıkıtısını vererek çalışmadı. Bu durumda aşağıda yolunu verdiğim tc.log dosyasını silerek yeniden başlatmayı denediğinizde mysql sunucunuz başarılı bir şekilde başlatılmış olacaktır.

/Applications/XAMPP/xamppfiles/var/mysql/tc.log

İyi çalışmalar…

PHP ile Content Bot yaparken preg_match_all içerisinde birden fazla pattern kullanımı

Standard

Merhaba Arkadaşlar;

Bir site üzerinden curl kullanarak bot yapmak herkesin malumu kolay bir işlem; ama ya birden fazla pattern ihtiyacı duyarsanız?


<ul><li><span>ürün 1</span></li><li><span>ürün 2</span></li><li><span>ürün 3</span></li></ul>

Yukarıdaki içerik için aşağıdaki pattern doğru olacaktır;

#<li><span>(.*?)</span></li>#

ancak

<ul><li><span>ürün 1</span></li><li><div>indirimde</div><span>ürün 2</span></li><li><span>ürün 3</span></li></ul>

gibi bir eleman ile karşılaştığında preg_match_all çalışmayı durduracak bu satıra gelene kadar aldıklarını döndürecektir. Peki bu durumda ne yapacağız?

Şu anda elimizde iki adet pattern var. Ya ilki ya da ikincisi ile eşleşenleri listelemek istiyoruz. Bunu şöyle düşünün; veri 1 ya da 2 ye eşit ise işlemi gerçekleştir şeklinde bir if bloğumuz var. Kısaca OR operatörü kullanacağız. preg_match_all içerisinde OR operatörü kullanımı için patternlar arasında | (düz çizgi) kullanacağız.

Aşağıdaki örnek kod satırı sorunu çözmüş olacaktır.


preg_match_all('#<li><span>(.*?)</span>|<div>indirimde</div><span>(.*?)</span></li>#',$pattern,$arrRet);
print_r($arrRet);

Çıktı aşağıdaki gibi olacaktır.

Array
(
[0] => Array
(
[0] =>
ürün 1
[1] =>
indirimde
ürün 2

[2] =>
ürün 3
)

[1] => Array
(
[0] => ürün 1
[1] =>
[2] => ürün 3
)

[2] => Array
(
[0] =>
[1] => ürün 2
[2] =>
)

)

Burada çıktı dizisinin birinci ve ikinci indislerinde ki puzzle vari çıktı yapısını farketmişsinizdir. Birinci patterna uyan verileri 1 numaralı indiste, “|” ile ifade ettiğimiz or operatörü ile belirttiğimiz ikinci patterna uyan veriler 2 numaralı indiste listelenmiş durumda.

Umarım işinize yarar, iyi çalışmalar…