2011-11-23 85 views
0

好吧,我有一个相当长的查询,只有当我添加一个IN语句时失败。以下查询直接在MySQL控制台中工作良好,但在PHP中完成时不返回任何内容。PHP MySQL不支持IN吗?

$db = mysql_connect('localhost', 'something', 'somepassword'); 

$query = "SELECT * 
FROM alt_table f 
INNER JOIN alt_fac_table_c cl ON (f.id = cl.alt_table2_ida) 
INNER JOIN alt_table c ON (cl.alt_table_idb = c.id) 
LEFT OUTER JOIN alt_table_contacts_c con ON (f.id = con.alt_table_ida) 
LEFT OUTER JOIN contacts cc ON (con.alt_table_idb = cc.id) 
WHERE c.name = 'myname' 
AND f.state IN ('AL','FL') ORDER BY fname;"; 

$result = mysql_query($query); 

问题不在于与数据库连接,而在于与查询本身无关。很明显,我已经重新命名了一些东西,但查询是一样的。在PHP中,它不会返回任何内容(没有错误,没有任何内容),但在SSH /控制台中它将返回我需要的所有行。如果我删除“AND f.state IN('AL','FL')ORDER BY fname;”;“查询的作品,但给我的每一个国家。因此,最大的问题是... PHP是否有IN语句有问题吗?

UPDATE FIX 它最终成为了发布数据的问题,我发布了'AL',FL'的单引号,它显然是在发布后奇怪地编码它们。某种形式的安全功能。我把帖出来后,并加入它,它的服务器端PHP替代和它的作品。

+5

无论您使用哪种编程语言与MySQL进行交互,MySQL都是MySQL。 – BoltClock

+0

讨厌是粗鲁的,但根本无济于事,因为当在shell中直接查询数据库时,这个确切的语句可以工作。 – Tyler

+0

也许如果您发布了未删节的代码,我们可能会提供帮助?另外,用'mysql_error()'检查错误。我还假定你实际上正在对结果集做些什么,而不仅仅是依靠它向你显示带'echo $ result;'或类似行的行? 'while($ row = mysql_fetch_array($ result)){print_r($ row); }' –

回答

0

它最终成为发布数据的问题。我发布了'AL',FL'的单引号。这显然是在邮政编码他们奇怪。我假设某种安全功能。我从帖子中拿出了引用,并将其添加到了服务器端PHP中,并且它可以正常工作。

6

你忘记了选择一个数据库...

mysql_select_db('database_name', $db); 

这应该在拨打mysql_connect()函数之后进行。

http://uk.php.net/mysql_select_db

它将提供成功真/假,所以你可以使用以下方法来确保它连接。

if(! mysql_select_db('database_name', $db)) { 
    die('failed to select database'); 
} 

除了上面,你可以修改下面一行

$result = mysql_query($query); 

更像以下。这将显示您返回任何错误,并在你的情况下,No database selected错误

$result = mysql_query($query) or die(mysql_error()); 
+1

另一篇文章(从那以后被删除)也提出了一个很好的观点 - 摆脱查询中的分号,因为它不需要在那里。 – Crontab

+0

的确,它并不需要在那里。但是,在这种情况下,它不会造成任何伤害,因为它在查询结束时。 –

+0

不是问题。我只是忽略了在上面的代码片段中提供该行。看到我的评论,我说它在IN语句中正常工作。 – Tyler