2009-08-31 11 views
1

Je suis perplexe. Pourquoi une requête fonctionnerait-elle dans phpMyAdmin mais pas dans un environnement MAMP? J'ai renvoyé la requête, qui a retourné 0 résultats dans MAMP, l'ai copiée et l'ai collée dans phpMyAdmin et la même requête renvoie le résultat attendu.La requête fonctionne dans phpMyAdmin mais pas via mysql_query

select 
    c.id 
from 
    (select id, business_id 
    from coup 
    where match(name) against ('$search') 
    ) as c 
    left join 
     (select business_id 
     from bus 
     where match(name, category, subcat) against ('$search') 
     ) as b on 
     c.business_id = b.business_id 
    inner join bloc z on 
     c.business_id = z.business_id 
where 
    z.zip = '$zip' 

Voici les lignes telles qu'elles apparaissent dans le code

$q = "select c.id from (select id, business_id from ".TBL_COUPONS." where match(name) against ('".$search."')) as c left join (select business_id from ".TBL_BUSINESS." where match(name, category, subcat) against ('".$search."')) as b on c.business_id = b.business_id inner join ".TBL_BLOCATION." as l on c.business_id = l.business_id where l.zip = '".$zip."'"; 
$rs = mysql_query($q) or die(mysql_error()); 
$rec = array(); 
while(($row = mysql_fetch_array($rs)) !== FALSE){ 
    $rec[] = $row[0]; 
} 

echo $ q montre:

select c.id from (select id, business_id from coupons where match(name) against ('walk')) as c left join (select business_id from business where match(name, category, subcat) against ('walk')) as b on c.business_id = b.business_id inner join buslocations as l on c.business_id = l.business_id where l.zip = '91326' 
+0

Aw, shucks, vous utilisez ma requête. Je suis touché! – Eric

+0

En outre, pouvez-vous poster le code que vous utilisez pour l'obtenir via 'mysql_query'? Peut-être une erreur dans la façon dont vous construisez la chaîne. – Eric

+0

Est-ce que vous bouclez $ rs après l'exécution de mysql_query? – Christian

Répondre

2

Dans mon expérience, il est de 80% de chances que le problème est que vous utilisez deux bases de données différentes qui contiennent des données différentes.

Vous devez décomposer la requête en tests plus simples jusqu'à ce que vous puissiez savoir ce qui est différent.

Essayez les requêtes suivantes dans les deux environnements:

SELECT COUNT(*) FROM coupons; 
SELECT COUNT(*) FROM coupons WHERE MATCH(name) AGAINST ('walk'); 

SELECT COUNT(*) FROM business; 
SELECT COUNT(*) FROM business WHERE MATCH(name, category, subcat) AGAINST ('walk'); 

SELECT COUNT(*) FROM bloc; 
SELECT COUNT(*) FROM bloc WHERE zip = '91326'; 

Il est probable que les résultats d'un ou plusieurs de ces requêtes seront différentes. Cela signifie que vous avez deux bases de données différentes avec des données différentes. Soit deux schémas sur la même instance MySQL, soit deux instances MySQL séparées. Vous ne vous connectez pas à la base de données à laquelle vous pensez vous connecter dans l'une ou l'autre interface.

+0

Bill, bien que j'apprécie le temps que vous avez pris pour répondre, mon problème n'était pas avec la connexion à la base de données, mon problème était moi comme vous pouvez le voir dans les commentaires ci-dessus. –

+0

@ivannovak Si vous avez trouvé la réponse, vous devriez répondre à votre propre question (et accepter la réponse) afin que les autres sachent quelle était la réponse et n'essayez pas de répondre à la question à nouveau) – Josh

+0

Et il est toujours vrai que 4 cas sur 5 des anomalies de données impaires sont parce qu'on ne se connecte pas à la base de données que l'on pense. –

Questions connexes