[RESOLU] problème de requeteSELECT

Eléphant du PHP | 417 Messages

09 déc. 2012, 14:53

bonjour

j'ai un souci avec la requête select sur un champ de type varchar

dans ma bdd j'ai un champ ipclient de type varchar

dans ma requête je met
SELECT count(*) FROM client where ipclient ='127.0.0.1';


et dans la bdd j'ai bien un champ avec cette adresse ip mais le résultat de la requete est 0

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

09 déc. 2012, 17:57

Salut,

La requête est relativement basique pourtant.

Tu n'aurais pas des caractères invisible (espace, saut de ligne etc) en plus dans ce champ ?

Peux tu poster la structure de la table ainsi qu'un jeux de donnée utilisable (une dizaine de lignes).


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 417 Messages

09 déc. 2012, 21:39

Salut moogli merci pour ta réponse,

alors la requête marche finalement je sais pas d'ou ça vien mais j'ai rien changé au niveau de la requête :shock:

Maintenant le souci que j'ai c'est que quand je fait la requête précédente ds mysql j'ai la bonne résultat (2)
sauf que quand je lance la même requête sur php j'ai résultat (1) :s

mais quand je fait un select ipVisitor et pas select count(*) la j'ai bien la bonne résultat 2

voici le script php
	$ipVisitor = $_SERVER['REMOTE_ADDR'];
	$req1 = mysql_query('SELECT count(*) FROM visitors WHERE ipvisitor = "127.0.0.1" ') or die(mysql_error());
	$result=mysql_num_rows($req1);
	echo $result;
	if ($result == 0)
		$req2=mysql_query('INSERT INTO visitors VALUES("", "'.$ipVisitor.'", "'.date("Y-m-d H:i:s").'", "'.date("Y-m-d H:i:s").'", "1" )') or die(mysql_error());
	else
		$req2=mysql_query('UPDATE visitors SET dateLastVisit = "'.date("Y-m-d H:i:s").'" WHERE ipVisitor = "'.$ipVisitor.'"')or die(mysql_error());
voici le script de ma table ainsi que des lignes de test
CREATE TABLE IF NOT EXISTS `visitors` (
  `idVisitor` int(11) NOT NULL AUTO_INCREMENT,
  `ipVisitor` varchar(16) NOT NULL,
  `dateFirstVisit` datetime NOT NULL,
  `dateLastVisit` datetime NOT NULL,
  `nbVisit` int(11) NOT NULL DEFAULT '1',
  PRIMARY KEY (`idVisitor`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=15 ;

--
-- Contenu de la table `visitors`
--

INSERT INTO `visitors` (`idVisitor`, `ipVisitor`, `dateFirstVisit`, `dateLastVisit`, `nbVisit`) VALUES
(1, '78.251.39.243', '2012-12-05 16:49:39', '0000-00-00 00:00:00', 0),
(2, '78.251.62.8', '2011-12-07 23:00:00', '0000-00-00 00:00:00', 0),
(3, '78.251.39.243', '2011-12-07 23:17:00', '0000-00-00 00:00:00', 0),
(4, '84.102.51.85', '2012-03-11 12:16:00', '0000-00-00 00:00:00', 0),
(5, '114.221.168.54', '2011-12-08 06:17:00', '0000-00-00 00:00:00', 0),
(6, '193.253.141.64', '2012-01-24 23:50:00', '0000-00-00 00:00:00', 0),
(7, '88.169.83.38', '2012-08-29 08:18:00', '0000-00-00 00:00:00', 0),
(8, '66.249.17.111', '2011-12-09 11:33:00', '0000-00-00 00:00:00', 0),
(9, '90.84.144.55', '2011-12-09 17:05:00', '0000-00-00 00:00:00', 0),
(10, '78.251.47.201', '2011-12-10 01:17:00', '0000-00-00 00:00:00', 0),
(11, '213.166.213.217', '2011-12-09 21:36:00', '0000-00-00 00:00:00', 0),
(12, '118.120.46.11', '2012-11-07 11:39:00', '0000-00-00 00:00:00', 0),
(13, '127.0.0.1', '2012-12-09 13:49:16', '2012-12-09 20:33:51', 1),
(14, '127.0.0.1', '2012-12-09 13:49:20', '2012-12-09 20:33:51', 1);

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

10 déc. 2012, 00:19

pour commencer :
$req1 = mysql_query('SELECT count(*) FROM visitors WHERE ipvisitor = "127.0.0.1" ') or die(mysql_error());
$result=mysql_num_rows($req1);

Tu auras toujours une seule ligne avec ce code donc le mysql_num_rows est totalement inutile ;)

Utilise plutôt le résultat de count().

Sinon effectivement la chose est étrange, ton code est fonctionnel.

est tu certain infos que tu passe ?

met ta requête select dans une variable et affiche la (au besoin avec un var_dump()).


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 417 Messages

10 déc. 2012, 00:26

j'avais pas fait attention que le mysql_num_rows($req1); d'une requete avec select envoie toujours 1 donc c'est bon y a rien d'étrange dans mon problème maintenant :)

le select m'affiche deux ce qui est logique le count m'affiche 1 donc logique aussi

merci pour ton aide encore

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

10 déc. 2012, 11:17

j'avais pas fait attention que le mysql_num_rows($req1); d'une requete avec select envoie toujours 1 donc c'est bon y a rien d'étrange dans mon problème maintenant
Attention c'est parce qu'il y a un count dans la requete et qu'un count renvoie toujours quelque (zéro ou 412 mais une valeur) donc dans ce cas, et seulement celui ci tu peux prédire le nombre de tuple (1 ici).

d'une manière générale ne t'habitue pas au mysql_num_rows, il n'existe pas sur tous les drivers sgbd il est préférable de tenir compte du count (pis bon une requête pour ne pas utiliser les donnée c'est con ;) )


@+


ps : peux tu cliquer sur le bouton résolus ? :)
Il en faut peu pour être heureux ......

Eléphant du PHP | 417 Messages

10 déc. 2012, 14:29

tu as tt a fait raison je vais commencer a apprendre les bons habitudes :)

biensure je vais mettre le sujet comme résolut