$ Değişken operatör GİBİ

6 Cevap php

Bu benim ilk soru olduğunu ve bunu hızlı bir cevap almak için yeterince basit umut!

Temelde, ben aşağıdaki kodu var:

$variable = curPageURL();
$query = 'SELECT * FROM `tablename` WHERE `columnname` LIKE '$variable' ;

Ben $ değişken echo, o (sayfamda bir javascript olduğu) geçerli sayfanın url yazdırır

Sonuçta, ne istiyorum, arama terimi önce ve sonra joker ile geçerli sayfanın url olduğu için bir arama yapmak mümkün değildir. Hiçbir hata olsun, çünkü, sadece hiçbir sonuç, bu hiç mümkün olup olmadığından emin değilim, ya da ben sadece bir sözdizimi hatası varsa!

Denedim:

    $query = 'SELECT * FROM `tablename` WHERE `columnname` LIKE '"echo $variable" ' ;

Vs, ama yine muhtemelen "eksik ya da 'bir yanlış kullanıyorum

Ben ne yapıyorum yanlış söyle lütfen!

6 Cevap

Sonuçta, ne istiyorum, arama terimi önce ve sonra joker ile geçerli sayfanın url olduğu için bir arama yapmak mümkün değildir.

SQL joker karakteri yüzde işaretidir. Bu yüzden:

$variable = curPageURL();
$variable = mysql_real_escape_string($variable);
$query = "SELECT * FROM `tablename` WHERE `columnname` LIKE '%{$variable}%'";

Not: Ben ek bir kod bit ekledik. mysql_real_escape_string() bilerek veya yanlışlıkla bir SQL deyimi kıracak karakterleri koyarak kullanıcılardan koruyacaktır. Sen Parametrelenmiş sorguları kullanarak daha iyi, ama bu basit bir düzeltme daha ilgili bir konu.

Ayrıca Not: Ben alıntı sizin dize çözdüm, çok. Bu dize çift tırnaklı ise yalnızca doğrudan bir dize bir değişken kullanabilir, ve sonunda bir teklifi eksik $query.

Bu Lütfen yapmayın, bu SQL injection (this is a list of 138 StackOverflow questions you should read, absorb and understand prior to returning to your application) açıktır. Parametrized sorguları veya saklı yordamları kullanın.

Kullanın:

$query = "SELECT * FROM `tablename` WHERE `columnname` LIKE '{$variable}'" ;

Yukarıdaki gibi bir SQL enjeksiyon saldırıları önlemek için neden bir fikir almak için savunmasız olurdu, ben "bir annem patlatır" teslim:

alt text

Kullan double quotes değişken değerler yerine gerekirse:

## this code is open for SQL injection attacks
$query = "SELECT * FROM `tablename` WHERE `columnname` LIKE '$variable'";

Ya concat dize manuel:

## this code is open for SQL injection attacks
$query = 'SELECT * FROM `tablename` WHERE `columnname` LIKE "' . $variable . '"';

Bu hata raporlama ayarları doğru ayarlanmış olmadığını oldukça olasıdır: Eğer yazım hatası bildirilmesinden değil neden olarak.

Açık php.ini ve emin aşağıdaki ayarlanmış olduğundan emin olun:

display_errors = On

Ve:

error_reporting = E_ALL

Sizin kod SQL enjeksiyon saldırılarına karşı savunmasız olduğunu. Kullanıcı tarafından sağlanan veriler, bir SQL sorgu dizesi doğrudan konmamalıdır. Bunun yerine, bu tip ilk mysql_real_escape_string() gibi bir işlev ile hijyenik biçimde temizlenmiş olması gerekir.