Comment utiliser PDO pour récupérer le tableau de résultats en PHP?

je suis en train d'éditer mon script de recherche après avoir lu sur les attaques par injection SQL. J'essaie d'obtenir la même fonctionnalité de mon script en utilisant PDO au lieu d'une connexion mysql normale. Donc j'ai lu d'autres Billets sur PDO mais je ne suis pas sûr. Ces deux scripts auront-ils la même fonctionnalité?

avec AOP:

$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);

régulièrement mysql:

$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);

je continue avec la régulière exemple d'utilisation

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

pour créer un tableau de résultats concordants de la base de données. Comment puis-je faire cela avec PDO?

21
demandé sur Polynomial 2012-06-06 13:44:38

3 réponses

regardez PDOStatement.fetchAll méthode. Vous pouvez également utiliser fetch dans un itérateur modèle.

exemple de Code pour fetchAll, à partir de la documentation PHP:

<?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);

Résultats:

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

    [1] => Array
        (
            [NAME] => watermelon
            [COLOUR] => pink
        )
)
52
répondu Polynomial 2017-11-14 10:42:40

il y a trois façons de récupérer plusieurs lignes retournées par la déclaration AOP.

le plus simple est juste d'itérer au-dessus de PDOStatement lui-même:

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

un autre est de récupérer des lignes en utilisant la méthode fetch () à l'intérieur d'une instruction while familière:

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

mais pour l'application web moderne nous devrions avoir nos itéractions de base de données séparées de la sortie et donc la méthode la plus commode serait de récupérer toutes les lignes à la fois en utilisant fetchAll() méthode:

$stmt = $pdo->prepare("SELECT * FROM auction WHERE name LIKE ?")
$stmt->execute(array("%$query%"));
// fetching rows into array
$data = $stmt->fetchAll();

puis sortie dans un modèle:

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

notez que PDO supporte de nombreux modes de fetchall sophistiqués, permettant à fetchAll () de retourner des données dans de nombreux formats différents.

4
répondu Your Common Sense 2018-03-04 15:39:42
$st = $data->prepare("SELECT * FROM exampleWHERE example LIKE :search LIMIT 10"); 
-2
répondu rehan ali 2017-07-23 06:31:45