views:

193

answers:

1

I'm stumped. Why would a query work in phpMyAdmin but not in a MAMP environment? I've echoed out the query, which returned 0 results in MAMP, copied it and pasted it into phpMyAdmin and the same query returns the expected result.

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'

Below are the lines as they appear in the 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 shows:

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'
+1  A: 

In my experience, it's 80% likely that the problem is that you're using two different databases that contain different data.

You should decompose the query into simpler tests until you can find out what's different.

Try the following queries in both environments:

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

It's likely that the results of one or more of these queries will be different. This means you have two different databases with different data. Either two schemas on the same MySQL instance, or else two separate MySQL instances. You aren't connecting to the database you think you're connecting to in one or the other interface.

Bill Karwin
Bill, while I appreciate the time you took to answer, my problem was not with the database connection, my problem was me as you can see in the comments above.
ivannovak
@ivannovak if you figured out the answer you should answer your own question (and accept the answer) so others know what the answer was 9and don't try to answer the question again)
Josh
And it's still true that 4 out of 5 cases of odd data anomalies are because one isn't connecting to the database one thinks.
Bill Karwin