RECHERCHE PAR MOT CLÉ DANS TOUS LES CHAMPS DE TOUTES LES TABLES D'UNE BASE DE DO
phpAnonyme
Messages postés392Date d'inscriptionmercredi 28 octobre 2009StatutMembreDernière intervention23 mars 2012
-
20 mars 2011 à 15:49
ABDOULAX16
Messages postés1Date d'inscriptionsamedi 27 février 2016StatutMembreDernière intervention27 février 2016
-
27 févr. 2016 à 18:05
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
ABDOULAX16
Messages postés1Date d'inscriptionsamedi 27 février 2016StatutMembreDernière intervention27 février 2016 27 févr. 2016 à 18:05
merci,,,,,,,,,
furefure
Messages postés2Date d'inscriptionmardi 13 avril 2010StatutMembreDernière intervention22 mars 2011 22 mars 2011 à 13:07
Euh pourquoi pas var_dump($row) ou var_dump($dataX[X]) ...
C'est pas que ca me choque..
Sinon j'aime bien le code... C'est adaptable assez facilement pour le faire sur certain champs de certaine table
cs_gabay
Messages postés25Date d'inscriptionlundi 10 décembre 2007StatutMembreDernière intervention29 juin 2010 21 mars 2011 à 13:38
$word c'est le mot clé tu doit l'initialisé au début par une valeur que tu récupère en GET ou en POST ou bien pou tester tu mes juste une chaine de caractère.
Sinon, Marshall_Mathers, oui ca exécute autant de requêtes qu'il existe de champs, et c'est vrais que c'est mieux de concaténer les requête comme ca on réduit le nombre de requêtes à une par table... entre autre ca devient comme ceci:
$db = mysql_connect($host,$user,$pass) or die("Erreur de connexion au serveur");
mysql_select_db($dbase,$db) or die("Erreur de connexion a la base de donnees");
$table_name = mysql_query('show tables');
while($data = mysql_fetch_array($table_name)) {// on boucle sur les noms de chaque table
$columns_name = mysql_query('show columns from '.$data[0]);
while($data1 = mysql_fetch_array($columns_name)) {// on boucle sur les noms de tous les champs de chaque table
if(empty($columns)){
$columns .= $data1[0].' like "%Mot_clé%"';
}else{
$columns .= ' or '.$data1[0].' like "%Mot_clé%"';
}
}
$res= mysql_query('select * from '.$data[0].' where '.$columns);
while($data3 = mysql_fetch_array($res)) {// on affiche le resultat de la requete pour chaque champ de chaque table
echo " ".$data3[0].'
';
echo " ".$data3[1].'
';
//etc ......
}
}
?>
cs_nino31
Messages postés17Date d'inscriptionjeudi 6 mars 2008StatutMembreDernière intervention29 avril 2013 21 mars 2011 à 09:46
Bonjour,
Avec le code de phpanonyme, j'ai : "Notice: Undefined variable: word in E:\wamp\www\boxavenue\test-connect-bdd\search.php on line 16"
Un question : ou entre-t-on les mots à rechercher ?
Merci
cs_Marshall_Mathers
Messages postés56Date d'inscriptionmardi 4 mai 2004StatutMembreDernière intervention30 novembre 2007 21 mars 2011 à 05:53
Bonjour Gabay,
Ton script va exécuter autant de requêtes qu'il existe de champs ? Je ne pense pas que cela soit très bon pour l'accès et la vitesse...
J'ai un script du même genre qui concatène les requêtes ensemble comme le script PDO de “phpAnonyme”. Je pense que c'est la meilleure solution.
Mais continue comme ça =) !
cs_gabay
Messages postés25Date d'inscriptionlundi 10 décembre 2007StatutMembreDernière intervention29 juin 2010 20 mars 2011 à 17:47
T'a raison et en plus c'est très bien organiser ;)
phpAnonyme
Messages postés392Date d'inscriptionmercredi 28 octobre 2009StatutMembreDernière intervention23 mars 201255 20 mars 2011 à 15:59
Je me suis trompé de code :
$sth = new PDO('mysql:host='.$host.';dbname='.$dbase, $user, $pass);
$getTables = $sth->prepare('SHOW TABLES');
$getTables->execute();
$resultTables = $getTables->fetchAll();
if(empty($resultTables))
throw new Exception('Pas de tables dans la BDD');
foreach($resultTables AS $nameTables) {
$getColumns = $sth->prepare('SHOW COLUMNS FROM '.$nameTables[0]);
$getColumns->execute();
$resultColumns = $getColumns->fetchAll();
$columns = '';
foreach($resultColumns AS $k => $columnsName) {
if(empty($columns))
$columns .= '`'.$resultColumns[$k]['Field'].'` LIKE \'%'.$word.'%\'';
else
$columns .= ' OR `'.$resultColumns[$k]['Field'].'` LIKE \'%'.$word.'%\'';
}
$result = $sth->prepare('SELECT * FROM '. $nameTables[0] .' WHERE '.$columns);
$result->execute();
$row = $result->fetchAll();
if(!empty($row)) {
echo '';
print_r($row);
echo '
';
}
}
requête préparée !
Mais ça bon ca change pas grand chose sauf au niveau de la rapidité
phpAnonyme
Messages postés392Date d'inscriptionmercredi 28 octobre 2009StatutMembreDernière intervention23 mars 201255 20 mars 2011 à 15:49
Avec PDO ça coule nettement plus vite, d'autant que c'est plus intéressant !
$sth = new PDO('mysql:host='.$host.';dbname='.$dbase, $user, $pass);
$getTables = $sth->query('SHOW TABLES');
$resultTables = $getTables->fetchAll();
if(empty($resultTables))
throw new Exception('Pas de tables dans la BDD');
foreach($resultTables AS $nameTables) {
$getColumns = $sth->query('SHOW COLUMNS FROM '.$nameTables[0]);
$resultColumns = $getColumns->fetchAll();
$columns = '';
foreach($resultColumns AS $k => $columnsName) {
if(empty($columns))
$columns .= '`'.$resultColumns[$k]['Field'].'` LIKE \'%'.$word.'%\'';
else
$columns .= ' OR `'.$resultColumns[$k]['Field'].'` LIKE \'%'.$word.'%\'';
}
$result = $sth->query('SELECT * FROM '. $nameTables[0] .' WHERE '.$columns);
$row = $result->fetchAll();
if(!empty($row)) {
echo '';
print_r($row);
echo '
27 févr. 2016 à 18:05
22 mars 2011 à 13:07
C'est pas que ca me choque..
Sinon j'aime bien le code... C'est adaptable assez facilement pour le faire sur certain champs de certaine table
21 mars 2011 à 13:38
Sinon, Marshall_Mathers, oui ca exécute autant de requêtes qu'il existe de champs, et c'est vrais que c'est mieux de concaténer les requête comme ca on réduit le nombre de requêtes à une par table... entre autre ca devient comme ceci:
<?php
$host = 'localhost';
$user = 'root';
$pass = 'root';
$dbase = 'nom_de_la_base_de_donnee';
$columns ='';
$db = mysql_connect($host,$user,$pass) or die("Erreur de connexion au serveur");
mysql_select_db($dbase,$db) or die("Erreur de connexion a la base de donnees");
$table_name = mysql_query('show tables');
while($data = mysql_fetch_array($table_name)) {// on boucle sur les noms de chaque table
$columns_name = mysql_query('show columns from '.$data[0]);
while($data1 = mysql_fetch_array($columns_name)) {// on boucle sur les noms de tous les champs de chaque table
if(empty($columns)){
$columns .= $data1[0].' like "%Mot_clé%"';
}else{
$columns .= ' or '.$data1[0].' like "%Mot_clé%"';
}
}
$res= mysql_query('select * from '.$data[0].' where '.$columns);
while($data3 = mysql_fetch_array($res)) {// on affiche le resultat de la requete pour chaque champ de chaque table
echo " ".$data3[0].'
';
echo " ".$data3[1].'
';
//etc ......
}
}
?>
21 mars 2011 à 09:46
Avec le code de phpanonyme, j'ai : "Notice: Undefined variable: word in E:\wamp\www\boxavenue\test-connect-bdd\search.php on line 16"
Un question : ou entre-t-on les mots à rechercher ?
Merci
21 mars 2011 à 05:53
Ton script va exécuter autant de requêtes qu'il existe de champs ? Je ne pense pas que cela soit très bon pour l'accès et la vitesse...
J'ai un script du même genre qui concatène les requêtes ensemble comme le script PDO de “phpAnonyme”. Je pense que c'est la meilleure solution.
Mais continue comme ça =) !
20 mars 2011 à 17:47
20 mars 2011 à 15:59
$sth = new PDO('mysql:host='.$host.';dbname='.$dbase, $user, $pass);
$getTables = $sth->prepare('SHOW TABLES');
$getTables->execute();
$resultTables = $getTables->fetchAll();
if(empty($resultTables))
throw new Exception('Pas de tables dans la BDD');
foreach($resultTables AS $nameTables) {
$getColumns = $sth->prepare('SHOW COLUMNS FROM '.$nameTables[0]);
$getColumns->execute();
$resultColumns = $getColumns->fetchAll();
$columns = '';
foreach($resultColumns AS $k => $columnsName) {
if(empty($columns))
$columns .= '`'.$resultColumns[$k]['Field'].'` LIKE \'%'.$word.'%\'';
else
$columns .= ' OR `'.$resultColumns[$k]['Field'].'` LIKE \'%'.$word.'%\'';
}
$result = $sth->prepare('SELECT * FROM '. $nameTables[0] .' WHERE '.$columns);
$result->execute();
$row = $result->fetchAll();
if(!empty($row)) {
echo '';
print_r($row);
echo '
';
}
}
requête préparée !
Mais ça bon ca change pas grand chose sauf au niveau de la rapidité
20 mars 2011 à 15:49
$sth = new PDO('mysql:host='.$host.';dbname='.$dbase, $user, $pass);
$getTables = $sth->query('SHOW TABLES');
$resultTables = $getTables->fetchAll();
if(empty($resultTables))
throw new Exception('Pas de tables dans la BDD');
foreach($resultTables AS $nameTables) {
$getColumns = $sth->query('SHOW COLUMNS FROM '.$nameTables[0]);
$resultColumns = $getColumns->fetchAll();
$columns = '';
foreach($resultColumns AS $k => $columnsName) {
if(empty($columns))
$columns .= '`'.$resultColumns[$k]['Field'].'` LIKE \'%'.$word.'%\'';
else
$columns .= ' OR `'.$resultColumns[$k]['Field'].'` LIKE \'%'.$word.'%\'';
}
$result = $sth->query('SELECT * FROM '. $nameTables[0] .' WHERE '.$columns);
$row = $result->fetchAll();
if(!empty($row)) {
echo '';
print_r($row);
echo '
';
}
}