Recherche ensemble de la table? PHP MySQL
J'ai fait la recherche suivante script, mais il ne peut lancer une recherche sur une colonne de table lors de l'interrogation de la base de données:
$query = "select * from explore where site_name like '%".$searchterm."%'";
Je voudrais savoir comment je peux rechercher l'ensemble de la table(explorer). Aussi, j'aurais besoin de fixer cette ligne de code:
echo "$num_found. ".($row['site_name'])." <br />";
Une dernière chose qui m'énerve, c'est quand j'appuie sur le bouton d'envoi sur une autre page j'affiche toujours le message "Veuillez entrer un terme de recherche." même quand je rentre dans quelque chose?
Merci pour toute aide, voici le script complet, si nécessaire:
<?php
//Set variables from form.
$searchterm = $_POST['searchterm'];
trim ($searchterm);
//Check if search term was entered.
if (!$serachterm)
{
echo "Please enter a search term.";
}
//Add slashes to search term.
if (!get_magic_quotes_gpc())
{
$searchterm = addcslashes($searchterm);
}
//Connects to database.
@ $dbconn = new mysqli('localhost', 'root', 'root', 'ajax_demo');
if (mysqli_connect_errno())
{
echo "Could not connect to database. Please try again later.";
exit;
}
//Query the database.
$query = "select * from explore where site_name like '%".$searchterm."%'";
$result = $dbconn->query($query);
//Number of rows found.
$num_results = $result->num_rows;
echo "Found: ".$num_results."</p>";
//Loops through results.
for ($i=0; $i <$num_results; $i++)
{
$num_found = $i + 1;
$row = $result->fetch_assoc();
echo "$num_found. ".($row['site_name'])." <br />";
}
//Escape database.
$result->free();
$dbconn->close();
?>
OriginalL'auteur Spyderfusion02 | 2009-12-14
Vous devez vous connecter pour publier un commentaire.
Contrairement à d'autres réponses, je pense que vous voulez utiliser "OU" dans votre requête, pas de "ET":
Remplacer
other_column
avec le nom d'un deuxième colonne. Vous pouvez répéter la partie que j'ai ajouté pour chacun de vos colonnes.Note: ceci est en supposant que votre variable
$searchterm
a déjà été échappé pour la base de données, par exemple avec$mysqli->real_escape_string($searchterm);
. Toujours s'assurer que c'est le cas, ou, mieux encore, utiliser des requêtes paramétrées.De même lors de la sortie de vos variables comme
$row['site_name']
assurez-vous de toujours échapper pour le HTML, par exemple à l'aide dehtmlspecialchars($row['site_name'])
.Assurez-vous que les deux formes d'utiliser le même méthode post (dans votre exemple). Le
<form>
balise doit avoir l'attributmethod="post"
.Aussi, quel est le problème avec la ligne de code que vous avez mentionné? Est-il une erreur? Il devrait fonctionner aussi loin que je peux dire.
OriginalL'auteur DisgruntledGoat
Un UNION requête de fournir des résultats dans un plus optimisée de la mode que d'utiliser simplement OU. Veuillez noter que l'utilisation des COMME de manière ne vous autorise pas à utiliser tous les indices que vous pourriez avoir sur votre table. Vous pouvez utiliser les méthodes suivantes pour fournir une plus optimisé requête au détriment de perdre quelques résultats possibles:
Cette requête est probablement aussi vite que vous allez obtenir sans l'aide de la recherche en texte intégral. L'inconvénient, cependant, est que vous ne pouvez correspondre les chaînes commençant par la searchterm.
$query = "select * from explore where site_name like '%".$searchterm."%'
ou other_column like '%".$searchterm."%'" Il y a une chance MySql va faire plus d'un full table scan...Le point de ma réponse, c'est qu'il serait d'utiliser un INDEX, par opposition à toutes les autres réponses. Cela permettrait d'éviter des analyses de tables complètes ainsi que de fournir des résultats plus rapides par pas l'utilisation d'un OU d'une requête.
OriginalL'auteur Corey Ballou
Pour la recherche d'autres colonnes de la table que vous avez besoin d'ajouter des conditions à votre sql
Mais si vous ne savez pas que je vous conseille en passant par certaines sql tutoriel...
Aussi je ne vois rien de mal avec cette ligne
Quel message d'erreur avez-vous?
vous;re droit, mon mauvais 😉
OriginalL'auteur Adrian Serafin
Juste ajouter " ET de la colonne = "condition"' à la clause where de la requête.
Être prudent avec l'ajout de beaucoup de COMME % conditions que ceux-ci peuvent être très lent, surtout si vous utilisez un front de wild card. Cela provoque le SGBDR de recherche de chaque ligne. Vous pouvez optimiser si vous utilisez un index sur la colonne et seulement un point générique.
OriginalL'auteur Brad
Vous êtes à la recherche de l'ensemble de la table, juste de limiter les résultats à ceux où la
site_name like '%".$searchterm."%'
. Si vous souhaitez rechercher tout ce à partir de cette table, vous devez supprimer la clause whereVoici le corrigé de la ligne. Vous avez eu un peu trop de citations.
$num_found
. C'est-à-dire à sortir comme1. Site Name<br />
autant que je sache.Bonne prise sur la ligne, j'ai raté le". " dans son code. C'est maintenant corrigé. Cependant, je ne suis pas en train de faire des hypothèses sur ce qu'il veut dire quand il dit, "je voudrais savoir comment je peux rechercher l'ensemble de la table(explorer)". Je suppose que j'ai donné une smart alec réponse, car la question était vague, mais cela ne veut pas dire que c'est mal. Il répond à ce qu'il a demandé...
Mais je ne vois pas où
echo $num_found.".".($row['site_name'])." <br />";
s'améliore au cours deecho "$num_found." .($row['site_name'])." <br />";
. Si je ne suis pas complète mauvais, les deux sont correctes.n'affiche pas la valeur de la variable, mais plutôt de montrer que le texte " $num_found.'. Si elle a été écrite
echo "{$num_found}."
, avec les accolades autour d'elle ou la concaténation de façon, je l'ai écrit ci-dessus, la sortie serait de montrer la valeur de la variable siC'est à cause de la dot? Parce que normalement, PHP traite les chaînes entourées en
" "
et remplace les variables. Vous avez été correct si la chaîne est contenue dans des guillemets simples.OriginalL'auteur munch
Concernant l'affichage du message, vous avez une erreur dans votre code:
devrait être:
Dans le code que vous avez écrit,
!$serachterm
évalue toujours àtrue
parce que vous n'avez jamais déclaré une variable$seracherm
(notez la faute de frappe).Si il a copié et collé son code, c'est de la réponse à sa question: "Une dernière chose qui m'énerve, c'est quand j'appuie sur le bouton d'envoi sur une autre page j'affiche toujours le message "Veuillez entrer un terme de recherche." même quand je rentre dans quelque chose?"
Aussi longtemps que n'a pas dit " Uups, c'était une copie&coller à l'erreur, à mon code d'origine contient
if(!$searchterm)
", c'est une réponse valable.OriginalL'auteur Felix Kling
votre code est très bugy pour sql injection d'abord faire
cela
prochaine
finalement votre recherche ressemble à ceci
-1 pour
htmlspecialchars
contre les injections SQL.OriginalL'auteur streetparade