120 votes

Comment puis-je créer un AOP requête paramétrée avec une déclaration?

Voici ma tentative:

$query = $database->prepare('SELECT * FROM table WHERE column LIKE "?%"');

$query->execute(array('value'));

while ($results = $query->fetch()) {
  echo $results['column'];
}

136voto

Andrew G. Johnson Points 9572

Compris tout de suite après que j'ai posté:

$query = $database->prepare('SELECT * FROM table WHERE column LIKE ?');
$query->execute(array('value%'));
while ($results = $query->fetch())
{
    echo $results['column'];
}

99voto

Kzqai Points 7484

Comme avec % la reconnaissance partielle vous pouvez également le faire: column like concat('%', :something, '%') (en d'autres termes, en utilisant explicitement non échappés % des signes qui ne sont certainement pas la saisie de l'utilisateur) avec le paramètre nommé :something.

Edit: Une syntaxe alternative que j'ai trouvé est d'utiliser l'opérateur de concaténation: ||, donc ça va être tout simplement: where column like '%' || :something || '%' etc

@bobince mentionne ici que:

L' la difficulté vient quand vous voulez permettre à un littéral % ou _ de caractère dans le chaîne de recherche, sans avoir à agir comme un caractère générique.

Donc, c'est quelque chose à surveiller lors de la combinaison de comme et de paramétrage.

20voto

Nathan Sakoetoe Points 6090
$query =  $database->prepare('SELECT * FROM table WHERE column LIKE ?');
        $query->bindValue(1, "%$value%", PDO::PARAM_STR);
        $query->execute();

        if (!$query->rowCount() == 0) {
            while ($results = $query->fetch()) {
                echo $results['column'] . "<br />\n";
            }

        } else {
            echo 'Nothing found';
        }

    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X