为什么下面的SQL命令不能与PHP中的mysql_查询一起使用?

为什么下面的SQL命令不能与PHP中的mysql_查询一起使用?,php,mysql,phpmyadmin,inner-join,Php,Mysql,Phpmyadmin,Inner Join,它在phpmyadmin和mysql工作台中工作 不管我是否使用mysql\u real\u escape\u字符串并在适当的地方添加数据库名称,它都不会起作用。phpmyadmin php代码也无法工作 错误:警告:mysql_fetch_assoc()希望参数1是资源,布尔值在….中给出 所有其他与查询资源相关的函数都存在相同的错误 Upd: SELECT * FROM `enzymes` INNER JOIN `compounds` ON

它在phpmyadmin和mysql工作台中工作

不管我是否使用mysql\u real\u escape\u字符串并在适当的地方添加数据库名称,它都不会起作用。phpmyadmin php代码也无法工作

错误:警告:mysql_fetch_assoc()希望参数1是资源,布尔值在….中给出

所有其他与查询资源相关的函数都存在相同的错误

Upd

SELECT       *
FROM         `enzymes`
  INNER JOIN `compounds`
  ON         compounds.compound_id = enzymes.compound_id
WHERE        `ec` LIKE '1.11%'
,

解决方案:谢谢大家,-布拉德首先给出了关键的答案

case 'ec':
    $dbl = mysql_connect(DB_ADDRESS, DB_USER, DB_PASSWORD);
    mysql_select_db("kegg", $dbl);
    //a)connection is fine
    //b)tried with explicitly providing the db name vs with pre-selection
    $sql = "SELECT * FROM enzymes INNER JOIN `compounds` ON compounds.compound_id=enzymes.compound_id";
    print_r($sql);
    $result = mysql_query( $sql, $dbl);
    print  mysql_error ($dbl);
    while ($row = mysql_fetch_assoc($result)) {
         print_r($row)
         $items[ $row['name'] ] = $row['compound_id'];          
    }
最近出现了一个类似的话题,有人建议它只在选择特定字段时起作用。当需要所有数据时,关键的解决方案是解决歧义:

$sql = "SELECT enzymes.*, compounds.*\n"
. "FROM enzymes\n"
. " INNER JOIN compounds\n"
. " ON compounds.compound_id = enzymes.compound_id\n"
. "WHERE enzymes.ec LIKE '1.11%' LIMIT 0, 30 ";

我的直觉告诉我数据库被你的列引用搞糊涂了。当您开始执行联接时,尤其是当您有可能匹配的列名时,最好明确选择、比较的内容等

enzymes.*, compounds.*
但是,在不知道发生的确切错误的情况下,这只能是猜测

更新


现在我看到了错误,请确保您正在测试正确的查询响应。当您调用
mysql\u query
(或任何您使用的)时,请在尝试获取结果之前检查资源是否失败。大多数连接库都有一个*\u error或*\u last\u error方法,您可以调用该方法来查看失败的原因。

如果出现该错误,mysql\u查询将返回一个布尔值FALSE,表示错误。试试这个:

SELECT       enzymes.*
FROM         enzymes
  INNER JOIN compounds
  ON         compounds.compound_id = enzymes.compound_id
WHERE        counpounds.ec LIKE '1.11%'

要准确了解错误是什么。

有很多原因表明查询可以在phpMyAdmin这样的环境中工作,但不能通过PHP的mysql函数工作。对于初学者,请确保通过PHP的
mysql\u select\u db函数
()使用
USE
命令选择了正确的数据库。当使用phpMyAdmin时,这是在后台自动执行的,而不是在PHP脚本中

如果在查询中指定数据库的名称,则不需要执行上一步,但是,如果数据库名称发生更改,代码将更难维护

要指定表,请执行以下操作:
从数据库中选择field1,field2\u name.table\u name WHERE…


其次,如果不正确地使用双引号或单引号,则可能无法解析变量或其他类似问题:这将导致查询无效。代码示例将有助于确定是否是这种情况。

这表明您应该将mySQL\u查询传递给mySQL资源

看看:

$result = mysql_query(...your query here...) or die(mysql_error());
打开连接时,您将获得$link_标识符:

resource mysql_query ( string $query [, resource $link_identifier ] )

避免MySQL内部联接中的列不明确错误。 请尝试:

$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
   die('Could not connect: ' . mysql_error());
}

如果你会得到相似的ID对,问题就在这里。

它到底是如何“不起作用”的?您会遇到什么错误?当您加入时,最好使用
table.column
格式引用列(显式),否则您可能会遇到问题。(例如,
选择酶。*
其中components.ec如
,等等)是
ec
来自
化合物
的一列?如果是,它是某种文本字段(甚至是varchar)?如果它是数字的,
比如
就不起作用了。好吧,我删掉了整个where子句,但它还是失败了。。。upd:如果没有where子句,则不会返回任何结果。您可以发布代码中实际运行查询的部分吗?谢谢,我可以,我通常使用自己的sql包装库,它记录所有错误。我已经为此工作了超过2个小时!重新启动mysql和apache。
SELECT       compounds.compound_id as cid, enzymes.compound_id as eid
FROM         `enzymes`
  INNER JOIN `compounds`
  ON         compounds.compound_id = enzymes.compound_id
WHERE        `enzymes`.`ec` LIKE '1.11%'