2012-06-06 22 views
16

SQL injection saldırılarını okuduktan sonra arama komut dosyasını düzenliyorum. Ben düzenli bir mysql bağlantısı yerine PDO kullanarak betiğimin aynı işlevselliği elde etmeye çalışıyorum. Bu yüzden PDO hakkında başka yazılar okuyorum ama emin değilim. Bu iki betik aynı işlevselliği verecek mi?PHP'de sonuç dizisini almak için PDO nasıl kullanılır?

$pdo = new PDO('mysql:host=$host; dbname=$database;', $user, $pass); 
$stmt = $pdo->prepare('SELECT * FROM auction WHERE name = :name'); 
$stmt->bindParam(':name', $_GET['searchdivebay']); 
$stmt->execute(array(':name' => $name); 

düzenli Mysql ile: Ben eşleşen sonuçların bir dizi oluşturmak için

while($i < $numrows){ 
$row = mysql_fetch_array($result); 

kullanmak düzenli örnekle devam

$dbhost = @mysql_connect($host, $user, $pass) or die('Unable to connect to server'); 

@mysql_select_db('divebay') or die('Unable to select database'); 
$search = $_GET['searchdivebay']; 
$query = trim($search); 

$sql = "SELECT * FROM auction WHERE name LIKE '%" . $query . "%'"; 



if(!isset($query)){ 
echo 'Your search was invalid'; 
exit; 
} //line 18 

$result = mysql_query($trim); 
$numrows = mysql_num_rows($result); 
mysql_close($dbhost); 

PDO ile

veri tabanı. Bunu PDO ile nasıl yapabilirim?

+0

'mysql_ *' sürümü nasıl çalışır? Bunu ilan etmeden önce '$ query' kullanıyorsunuz ... – deceze

+0

" Düzenli "kod çalışmıyor. $ Sql’i ayarladıktan sonra '$ query'ı ayarladınız. – Polynomial

+0

olası bir kopyası [Select sorgusu için bir PDO nesnesini doğru şekilde nasıl kullanabilirim?] (Http://stackoverflow.com/questions/767026/how-can-i-properly-use-a-pdo-object-for-a -select-sorgu) – Polynomial

cevap

44

PDOStatement.fetchAll yöntemine bir göz atın. Yineleme düzeninde fetch da kullanabilirsiniz. PHP belgelerinden fetchAll için

kod örneği,:

<?php 
$sth = $dbh->prepare("SELECT name, colour FROM fruit"); 
$sth->execute(); 

/* Fetch all of the remaining rows in the result set */ 
print("Fetch all of the remaining rows in the result set:\n"); 
$result = $sth->fetchAll(\PDO::FETCH_ASSOC); 
print_r($result); 

Sonuçlar:

Array 
(
    [0] => Array 
     (
      [NAME] => pear 
      [COLOUR] => green 
     ) 

    [1] => Array 
     (
      [NAME] => watermelon 
      [COLOUR] => pink 
     ) 
) 
+11

'\ PDO :: FETCH_ASSOC' ve' \ PDO :: FETCH_NUM', getirme modunu tanımlamanıza izin verir. '\ PDO :: FETCH_ASSOC' sadece' field => value' dizisini döndürürken, '\ PDO :: FETCH_NUM' dizisini yalnızca sayısal tuşlarla döndürür ve' \ PDO :: FETCH_BOTH' cevabındaki sonucu döndürür. Bu sabit, bu durumda '-> fetchAll()' yöntemine geçirilmelidir. –

+0

@FARID Yeni bir soru gönderin. – Polynomial

-2
$st = $data->prepare("SELECT * FROM exampleWHERE example LIKE :search LIMIT 10"); 
+3

Lütfen OP'nin cevabınızı neden denemesi gerektiğine ve problemi nasıl çözdüğüne dair bir açıklama ekleyin. –

1

PDO deyimi tarafından döndürülen birden çok satır getirmesi üç yolu vardır.

$stmt = $pdo->prepare("SELECT * FROM auction WHERE name LIKE ?") 
$stmt->execute(array("%$query%")); 
// using while 
while($row = $stmt->fetch()) { 
    echo $row['name']; 
} 

ama modern için:

$stmt = $pdo->prepare("SELECT * FROM auction WHERE name LIKE ?") 
$stmt->execute(array("%$query%")); 
// iterating over a statement 
foreach($stmt as $row) { 
    echo $row['name']; 
} 

diğeri tanıdık iken deyimi içinde() yöntemini getirme kullanarak satırlarını alması şudur:

basit bir biraz üzerinde yineleme için PDOStatement kendisidir web uygulaması, bizden ayrılan datbase iteractions olmalıdır ve böylece en uygun yöntem fetchAll() yöntemi kullanarak bir kerede tüm satırları almak olacaktır:

Bir şablonda

ve ardından çıkış onları: PDO many sophisticated fetch modes, allowing fetchAll() to return data in many different formats destekler

<ul> 
<?php foreach($data as $row): ?> 
    <li><?=$row['name']?></li> 
<?php endforeach ?> 
</ul> 

Not.

İlgili konular