• 05-06-2013, 16:41:10
    #1
    Merhaba Arkadaşlar,

    2 sorum olacak sizlere:

    1)

    show/aranankelime

    bu url den gelen aranankelime verisini bu şekil sql sorgusundan geçirerek arama işlemini yapıyorum.
    $kelimeler = explode(" ", $id);
    				$s_array = array();
    				foreach ($kelimeler as $key => $value)
    				{
    				$s_array[] = "(`title` LIKE '%$value%')";
    				}
    				$where_str = implode(" or ", $s_array);
    				$sql	=	$this->query_cache("select id,thumb,source,views,liked,title,description,duration from videos where $where_str ORDER BY id LIMIT 20",3600);
    			
    				return $sql;
    memcache ile 3600 saniye cacheliyorum şimdilik bir sorun yok gibi Show Mysql Process da time değeri en fazla 4 olarak görüyorum. daha performanslı çekebilme yöntemi varmı acaba ?

    2. sorum ise gelen bu veriyi sql injection yememek için ne yapmamız gerekli. (url : show/"asd" olarak geldiğinde sorguya sadece asd olarak girmeli)
  • 05-06-2013, 19:02:16
    #2
    guvenlik.php
    <?PHP
    
    //fonksiyon baslar
    
    
    function guvenlik( $text )
    {
       $text = str_replace( '#', '', $text );
       $text = str_replace( '&', '', $text ); 
       $text = str_replace( ';', '', $text );
    
       $text = str_replace( ' ', '', $text );
       $text = str_replace( '!', '', $text );
       $text = str_replace( '"', '', $text );   
       $text = str_replace( '$', '', $text );
       $text = str_replace( '%', '', $text );  
       $text = str_replace(  "'", '', $text );
       $text = str_replace( '(', '', $text );
       $text = str_replace( ')', '', $text );
       $text = str_replace( '*', '', $text );   
       $text = str_replace( '+', '', $text ); 
       $text = str_replace( ',', '', $text );
       $text = str_replace( '-', '', $text );
       $text = str_replace( '.', '', $text );   
       $text = str_replace( '/', '', $text );
       $text = str_replace( ':', '', $text );   
       $text = str_replace( '<', '', $text );
       $text = str_replace( '=', '', $text );
       $text = str_replace( '>', '', $text );   
       $text = str_replace( '?', '', $text );
       $text = str_replace( '[', '', $text );
       $text = str_replace( '\\', '', $text );
       $text = str_replace( ']', '', $text );
       $text = str_replace( '^', '', $text );   
       $text = str_replace( '_', '', $text );
       $text = str_replace( '`', '', $text );
       $text = str_replace( '{', '', $text );
       $text = str_replace( '|', '', $text );   
       $text = str_replace( '}', '', $text );
       $text = str_replace( '~', '', $text );
    
       return $text;
    
    }
    
    //fonksiyon biter
    
    
    
    
    
    
    
    
    ?>
    dosyasını include edip kullanmanız yeterli olacaktır.
  • 05-06-2013, 20:13:32
    #3
    Tesekkur ederim hocam bu fonksiyon isimi gordu. Diger sorunum hakkinda bilginiz varmi acaba sql loadi tavan yapiyor bu sekilde.

    Samsung Galaxy S3 cihazi tapatalk 2 ile gonderildi.
  • 06-06-2013, 09:48:09
    #4
    BLaH adlı üyeden alıntı: mesajı görüntüle
    Tesekkur ederim hocam bu fonksiyon isimi gordu. Diger sorunum hakkinda bilginiz varmi acaba sql loadi tavan yapiyor bu sekilde.

    Samsung Galaxy S3 cihazi tapatalk 2 ile gonderildi.
    Show Mysql Process olayını ilk defa duyuyorum daha önce hiç kullanmadım.
  • 06-06-2013, 13:54:58
    #5
    5 milyon video veritabanım var diyordun sanırım geçen gün dostum sen.
    o kadar veriyi like ile search yapamazsın. Yaparsan mysql ağlar.
    fulltext search olayını araştır. Forumda konuları var.

    Özetlersek olayı:
    önce phpmyadmin'den fulltext olarak tablo yapısını degiştir. Fulltext yapmazsan aşağıdaki kod boş döner. Tabii tablo yapının myisam ve hücrelerin varchar yada text olması gerekliyor.

    ALTER TABLE videolar ADD FULLTEXT(description, title);

    $aranan=mysql_real_escape_string($_GET['kelime']);
    $sorgu = mysql_query('SELECT * FROM videolar 
    WHERE MATCH(title, description) AGAINST("'.$aranan.'")');
    
    while($row = mysql_fetch_array($sorgu))
    {
       echo $row[title] . '<br>';
    }
  • 06-06-2013, 14:59:11
    #6
    Misafir adlı üyeden alıntı: mesajı görüntüle
    5 milyon video veritabanım var diyordun sanırım geçen gün dostum sen.
    o kadar veriyi like ile search yapamazsın. Yaparsan mysql ağlar.
    fulltext search olayını araştır. Forumda konuları var.

    Özetlersek olayı:
    önce phpmyadmin'den fulltext olarak tablo yapısını degiştir. Fulltext yapmazsan aşağıdaki kod boş döner. Tabii tablo yapının myisam ve hücrelerin varchar yada text olması gerekliyor.

    ALTER TABLE videolar ADD FULLTEXT(description, title);

    $aranan=mysql_real_escape_string($_GET['kelime']);
    $sorgu = mysql_query('SELECT * FROM videolar 
    WHERE MATCH(title, description) AGAINST("'.$aranan.'")');
    
    while($row = mysql_fetch_array($sorgu))
    {
       echo $row[title] . '<br>';
    }
    evet dogrudur diyen bendim ve yanlış bilgi vermedim size

    önerilerinizi uygulamadım ve şuan harika sorun yok. çok teşekkür ederim.
  • 06-06-2013, 15:54:04
    #7
    Üyeliği durduruldu
    mesajım bulunsun.