2009-08-31 5 views
1

Ich bin ratlos. Warum funktioniert eine Abfrage in phpMyAdmin, aber nicht in einer MAMP-Umgebung? Ich habe die Abfrage wiederholt, die 0 Ergebnisse in MAMP zurückgegeben, kopiert und in phpMyAdmin eingefügt hat, und dieselbe Abfrage gibt das erwartete Ergebnis zurück.Abfrage funktioniert in phpMyAdmin aber nicht durch 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' 

unten, um die Linien sind, wie sie im 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 zeigt erscheinen:

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, Sie verwenden meine Abfrage. Ich bin berührt! – Eric

+0

Kannst du den Code, den du verwendest, um ihn über mysql_query zu bekommen? Es könnte ein Fehler bei der Konstruktion der Zeichenfolge auftreten. – Eric

+0

Schleifen Sie nach dem Ausführen von mysql_query über $ rs? – Christian

Antwort

2

Nach meiner Erfahrung ist es 80% wahrscheinlich, dass das Problem, dass Sie ist verwende zwei verschiedene Datenbanken, die unterschiedliche Daten enthalten.

Sie sollten die Abfrage in einfachere Tests zerlegen, bis Sie herausfinden können, was anders ist.

Versuchen Sie, die folgenden Abfragen in beiden Umgebungen:

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'; 

Es ist wahrscheinlich, dass die Ergebnisse eines oder mehrerer dieser Abfragen wird anders sein. Dies bedeutet, dass Sie zwei verschiedene Datenbanken mit unterschiedlichen Daten haben. Entweder zwei Schemas auf derselben MySQL-Instanz oder zwei separate MySQL-Instanzen. Sie stellen keine Verbindung zu der Datenbank her, von der Sie glauben, dass Sie sich mit der einen oder anderen Schnittstelle verbinden.

+0

Bill, während ich die Zeit zu schätzen weiß, die Sie zu beantworten, mein Problem war nicht mit der Datenbankverbindung, mein Problem war ich, wie Sie in den obigen Kommentaren sehen können. –

+0

@ivannovak Wenn Sie die Antwort herausgefunden haben, sollten Sie Ihre eigene Frage beantworten (und die Antwort akzeptieren), damit andere wissen, was die Antwort war und versuchen Sie nicht, die Frage erneut zu beantworten) – Josh

+0

Und es ist immer noch wahr, dass 4 von 5 Fällen von ungeraden Datenanomalien sind, weil man sich nicht mit der Datenbank verbindet, die man denkt. –

Verwandte Themen