【问题标题】:Why does this MySQL query work in phpmyadmin but doesn't return anything in my php script?为什么这个 MySQL 查询在 phpmyadmin 中有效,但在我的 php 脚本中没有返回任何内容?
【发布时间】:2011-06-23 04:06:27
【问题描述】:

我在 phpmyadmin 中尝试了以下查询,它返回了正确的结果,但是当我尝试将结果传递给 php 中的变量时,该变量基本上是空的(即,当我尝试在带有 mysql_fetch_array 的 while 循环中使用它时,我什么也没得到。而 mysql_num_rows 只返回 1)。

这可能与我在 MySQL 中创建临时表有关吗?这是查询:

CREATE TEMPORARY TABLE solved
SELECT comments.nid FROM flag_content
LEFT JOIN comments ON flag_content.content_id=comments.cid
LEFT JOIN term_node ON term_node.nid=comments.nid
WHERE flag_content.fid=3 AND term_node.tid=522;

SELECT node.nid, node.title, users.name, node_counter.totalcount, node_comment_statistics.comment_count, node_comment_statistics.last_comment_timestamp
FROM node
LEFT JOIN term_node ON node.nid = term_node.nid
LEFT JOIN node_comment_statistics ON node.nid = node_comment_statistics.nid
LEFT JOIN node_counter ON node.nid = node_counter.nid
LEFT JOIN users ON node.uid = users.uid
LEFT JOIN solved ON node.nid=solved.nid
WHERE term_node.tid=522 AND solved.nid IS NULL;

我将此查询存储在 PHP 函数中:

function getPosts(){
   dbConnect(); //establishes connection
   //"....." in the following line is the above query
   return mysql_query(".......") or die("<b>A fatal MySQL error occured</b>.\n<br />Query: " . $query . "<br />\nError: (" . mysql_errno() . ") " . mysql_error()); 
}

调用它的代码行是:

$result = getPosts();

当我调用 getPosts() 时,查询因致命错误而终止。我得到相同错误的两个版本,具体取决于查询是否使用“。”跨多行连接。或者干脆写在一行上。

跨多行连接时出错:

Error: (1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'comments.nid FROM flag_content LEFT JOIN comments ON flag_content.content_id=com' at line 1

单行写入时出错:

Error: (1064) You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT node.nid, node.title, users.name, node_counter.totalcount, node_comment_s' at line 1

【问题讨论】:

  • 需要查看 php,这显然是有问题的部分
  • 您可能只需要一点错误检查:$result = mysql_query($query) 或 die("发生致命的 MySQL 错误。\n
    查询: " . $query . "
    \n错误: (" .mysql_errno() . ") " .mysql_error());
  • @Dagon - 我编辑了帖子以显示 PHP。很基本。正如我在帖子中所说, echo mysql_num_rows($result) 只是给了我数字 1,而它应该有大约 15 行。我会在早上尝试您建议的第一件事的错误检查。
  • 函数内部没有数据库连接凭证,这可能是问题所在,上面的代码会给你确切的mysql错误。
  • 当您在 phpmyadmin 中运行查询时,您是否将查询输出回您的屏幕?我注意到有时 phpmyadmin 会解析并重新组合查询并进行一些编辑。它可能会检测到一些小问题并为您进行调整。

标签: mysql join phpmyadmin left-join temp-tables


【解决方案1】:

尝试一次执行一个查询。创建临时表,选择其中,然后将其作为三个单独的查询删除。作为安全预防措施,sql socket 只允许一个执行块中的一个查询

它看起来像......


mysql_query("CREATE TEMPORARY TABLE solved
SELECT comments.nid FROM flag_content
LEFT JOIN comments ON flag_content.content_id=comments.cid
LEFT JOIN term_node ON term_node.nid=comments.nid
WHERE flag_content.fid=3 AND term_node.tid=522;");

$result = mysql_query("SELECT node.nid, node.title, users.name, node_counter.totalcount, node_comment_statistics.comment_count, node_comment_statistics.last_comment_timestamp FROM node LEFT JOIN term_node ON node.nid = term_node.nid LEFT JOIN node_comment_statistics ON node.nid = node_comment_statistics.nid LEFT JOIN node_counter ON node.nid = node_counter.nid LEFT JOIN users ON node.uid = users.uid LEFT JOIN solved ON node.nid=solved.nid WHERE term_node.tid=522 AND solved.nid IS NULL; ");

【讨论】:

  • 你介意给我举个例子吗?我对 MySQL 不是很有经验。
  • 太棒了。完美运行。谢谢杰里米。
猜你喜欢
  • 1970-01-01
  • 2014-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多