mysql’deki tablonun olup olmadığını kontrol etmek (php kullanarak)

Php ile çalışırken, mysql’de kullandığımız veritabanı içerisinde, herhangi bir isimdeki tablonun var olup olmadığını kontrol etmenin bir kaç yolu vardır. Bu yazıda onlardan bahsedeceğim.

Bunlardan ilki, SHOW TABLES querysini kullanmaktır.

Örneğin, test isminde bir veritabanımız olsun. İçerisindeki tabloların ismi de, admin, member, log, test1, test2 olsun. Yani mysql’e konsoldan bağlanıp use test dedikten sonra, show tables dediğimizde karşımıza şu çıksın.

+------------------------+         |
| admin                  |
| member                 |
| log                    |
| test1                  |
| test2                  | 
+------------------------+

Şimdi işin Php kısmına geçelim.

// burada mysql'e bağlanmış olalım.

$result = mysql_query( "SHOW TABLES FROM test" );

if (! $result) {
	echo "Sorguda hata meydana geldi 
"; echo 'mysql error: ' . mysql_error(); } else { $row = array(); while ( $row = mysql_fetch_row( $result ) ) { echo "Tablo ismi : ".$row[0]."
"; } } mysql_free_result( $result );

SHOW TABLES FROM test querysinin ardından, LIKE parametresi ekleyerek, sonucu daraltabiliriz. Ardından da sonuçları php ile parse ederek, aradığımız isimdeki tablonun olup olmadığını kontrol edebiliriz. (SHOW TABLES FROM test LIKE ‘%min%’ gibi)

İkinci yöntemimiz ise, mysql’deki information_schema databasei içerisindeki TABLES tablosundaki bilgiler. Bu tabloda TABLE_SCHEMA sütununda veritabanı isimleri TABLE_NAME sütununda ise tablo isimleri yer almaktadır.

SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = ‘{database ismi}’ AND table_name = ‘{tablo ismi}’ şeklinde çalıştıracağımız sorgudan gelen sonuç ile istediğimizi elde etmiş olacağız. Yapalım;

// burada mysql'e bağlanmış olalım.

$result = mysql_query( "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema='test' AND table_name='test1'" );

if (! $result) {
	echo "Sorguda hata meydana geldi 
"; echo 'mysql error: ' . mysql_error(); } else { $count = mysql_num_rows($result); if($count == 1){ // tablo var, gerekli işlemler } else { // tablo yok, gerekli işlemler } } mysql_free_result( $result );

php strict standards – only variables should be passed by reference error

strict standards – only variables should be passed by reference error hatasını alıyorsanız, referans olarak değişken göndermeniz gereken yere, siz farklı bir şey göndermişsiniz demektir.

Ben hatayı şöyle almıştım.

$var = end(explode( "/", $filename ));

end işlemini yaptığım şey explode işleminin sonucu. Ancak explode bir array döndürürken, bu male dating rules arrayi bir değişkene atamadığım için, arrayin sadece adresini döndürmüş oluyor. Bu free sex slave videos online da end fonksiyonunun çalışmamasına sebep http://crosspointnyc.com/uemz-free-contact-personals-websites oluyor.

Çalışması için aşağıdaki gibi basit bir düzenleme yapıyoruz :

$tmpArr= explode( webcams in argentina  "/", $filename);
$var = end($tmpArr);

Bu problem php 5.4.x sürümlerinde karşınıza çıkmıyor ancak php 5.3.x sürümlerinde mevcuttur.

TypeHinting nedir? Php Typehinting

Typehinting demek, bir class’a ait metodun aldığı parametrelerin türünün önceden belirlenmesi, force edilmesi demektir. Ancak bu işlemi sadece objelerde ve arraylerde yapabilmekteyiz.

Örnek verecek olursak;

class Dubluve{
 public function deneme(array $a){
  var_dump($a);
 }
}
$obj = new Dubluve();

deneme metodu için şunları söyleyebiliriz;

// bu kodlar hata verecektir
$obj->deneme("php");
$obj->deneme(123);
$obj->deneme("1");

// bu kod çalışacaktır
$obj->deneme(array("a", "b", "c"));

Type hinting işlemini düzgün olarak array ve objelerde kullanabiliyoruz onun da şöyle bir püf noktası var. Metoda gönderdiğimiz parametre için default değer olarak NULL atarsak, gönderdiğimiz parametre de NULL olabilir. Bunu da örnekle açıklamak gerekirse,

class DubluveRSS{
 public function deneme(Dubluve $dubluve) // $dubluve değişkeni sadece Dubluve'nin objesi olabilir
 public function deneme(Dubluve $dubluve = NULL) // $dubluve değişkeni Dubluve'nin objesi olabilir veya NULL olabilir
}

Öte yandan ;

public function deneme(array $dubluve = array("a", "b", "c"))

bu fonksiyonu deneme(null); şeklinde çalıştıramayız. Ancak diyorsak ki, null parametre gönderilebilsin ancak null geldiyse default olarak bir şeyler atayabileyim, o zaman da şöyle birşey yapabiliriz

public function deneme(array $dubluve = null){
 if($dubluve === null){
   $dubluve = array("a", "b", "c");
 }
 .
 .
 .
}

Typehinting fonksiyonlarda da çalışmaktadır. Yine class metodlarında olduğu gibi sadece obje ve arrayler ile işlem yapılabilmektedir.

PHP Namesapace Autoload

Merhaba,

PHP 5.3.x ile beraber gelen namespace konusuna bu yazımda değinmiştim. Şimdi namespace autoload konusuna değinerek sizlere bilgilerimi paylaşmak istiyorum.

Koskoca bir proje tek bir include ile olur mu demeyin oluyor. Kullanmak istediğimiz namespace’yi use diyerek çağırmak ve ilgili sınıfın otomatik olarak include edilmesi için autoload mekanizması var. Şimdi bu yapıyı kurmak için proje dizinimize composer.json dosyası oluşturarak içine şu jsonu ekleyelim :

{

   "autoload":{
      "psr-0":{
         "" : "library" // sınıflarımın bulunduğu path (index.php ile aynı seviyede)
      }
   }
}

Not : composer işletim sisteminizde yüklü olmalıdır (ubuntu için curl -s https://getcomposer.org/installer | php)

Şimdi komut satırından proje dizinine gelerek şu komutu çalıştıralım ve ilgili dosyalarımızı oluşturalım :

composer install

Bu komutu çalıştırdıktan sonra vendor isminde bir klasör ve içerisine iligli dosyalar gelmiş olacak.Aynı zamanda composer ile uğraşmak istemiyorsanız internetten çeşitli kaynaklardan bu vendor içindeki dosyaları edinebilir veya kendiniz yazabilirsiniz. Nihayetinde PHP dosyaları ve composer sadece bu işi kolaylaştıran bir yapı.

Şimdi kullanımına gelecek olursak index.php dosyamıza vendor klasörü içindeki autoloader.php dosyamızı include etmek dışında hiçbirşey kalmıyor 🙂

Php Array Iterator Sinifina Kucuk Bir Ekleme

PHP de array objelerinin vazgeçilmezi array iteratörleridir. Array iteratör kullanmayacaksanız, array object yapmanıza pek de gerek yoktur açıkçası.
Array iteratör ile genelde while loop yaparsınız.

Burada hem
iterator->current(); demenize
hem de döngünün en sonunda da
iterator->next() demenize gerek kalmayacak bir metod ekledim kendi iterator sınıfıma.

Aşağıdaki iterator classı ile initialize edilen arrayobject sınıflarında iterator->getNext() dediğinizde hem currentı döndürecek hem de next yapmış olacaksınız.

Bu iterator sınıfına yeni metodlar eklenerek işlerinizi çok daha güzel ve kolay hale getirebilirsiniz. Bu da basit bir örneği olmuş oldu

class MyArrayIterator extends ArrayIterator
{
    public function getNext ()
    {
        $current = $this->current(); 
        
        parent::next();
        return $current;
    }
}