【问题标题】:MySQL query work OK in Workbench but slightly different in PHPMySQL 查询在 Workbench 中工作正常,但在 PHP 中略有不同
【发布时间】:2012-12-02 01:57:39
【问题描述】:

我有这个 MySQL 查询在 MySQL 环境中运行良好,但在 PHP 中运行时却不能,因为它在每种情况下(记录)显示 REGION、PROVINCIA、COMUNA 的相同值,而不是属于每个情况的正确值独立记录,因为它们可能彼此不同。

我需要找到合适的 SQL 语句进行查询,以使我能够获取查询中涉及的每条记录 (3) 的实际 REGION、PROVINCIA、COMUNA。

表 pos1postul、pos2pad 和 pos3mad 上的记录通过字段 REGION_ID、PROVINCIA_ID、COMUNA_ID 引用表 dir_region、dir_provincia 和 dir_comuna。

任何帮助将不胜感激。

SELECT * FROM db3.pos1postul 

INNER JOIN db3.dir_region AS region1 ON pos1postul.pos1_region=region1.REGION_ID
INNER JOIN db3.dir_provincia AS provincia1 ON  pos1postul.pos1_prov=provincia1.PROVINCIA_ID 
INNER JOIN db3.dir_comuna AS comuna1 ON pos1postul.pos1_comu=comuna1.COMUNA_ID, db3.pos2pad

INNER JOIN db3.dir_region AS region2 ON pos2pad.pos2_regionpad=region2.REGION_ID
INNER JOIN db3.dir_provincia AS provincia2 ON     pos2pad.pos2_provpad=provincia2.PROVINCIA_ID 
INNER JOIN db3.dir_comuna AS comuna2 ON pos2pad.pos2_comupad=comuna2.COMUNA_ID, db3.pos3mad 

INNER JOIN db3.dir_region AS region3 ON pos3mad.pos3_regionmad=region3.REGION_ID 
INNER JOIN db3.dir_provincia AS provincia3 ON  pos3mad.pos3_provmad=provincia3.PROVINCIA_ID 
INNER JOIN db3.dir_comuna AS comuna3 ON pos3mad.pos3_comumad=comuna3.COMUNA_ID 

WHERE pos1_aluID='n' 
AND pos2_padID=pos1_IDpostulpad 
AND pos3_madID=pos1_IDpostulmad

PHP 代码:

$idpostul_rsPostul = "-1";
if (isset($idpostul)) {
  $idpostul_rsPostul = $idpostul;
}
mysql_select_db($database_conndb3, $conndb3);
$query_rsPostul = sprintf("SELECT * FROM db3.pos1postul INNER JOIN db3.dir_region AS     region1 ON pos1postul.pos1_region=region1.REGION_ID INNER JOIN db3.dir_provincia AS     provincia1 ON pos1postul.pos1_prov=provincia1.PROVINCIA_ID INNER JOIN db3.dir_comuna AS     comuna1 ON  pos1postul.pos1_comu=comuna1.COMUNA_ID, db3.pos2pad INNER JOIN db3.dir_region AS region2 ON pos2pad.pos2_regionpad=region2.REGION_ID  INNER JOIN db3.dir_provincia AS provincia2 ON pos2pad.pos2_provpad=provincia2.PROVINCIA_ID INNER JOIN db3.dir_comuna AS comuna2 ON  pos2pad.pos2_comupad=comuna2.COMUNA_ID, db3.pos3mad INNER JOIN db3.dir_region AS region3 ON pos3mad.pos3_regionmad=region3.REGION_ID  INNER JOIN db3.dir_provincia AS provincia3 ON pos3mad.pos3_provmad=provincia3.PROVINCIA_ID INNER JOIN db3.dir_comuna AS comuna3 ON  pos3mad.pos3_comumad=comuna3.COMUNA_ID WHERE pos1_aluID=%s AND pos2_padID=pos1_IDpostulpad AND pos3_madID=pos1_IDpostulmad",  GetSQLValueString($idpostul_rsPostul, "int"));
$rsPostul = mysql_query($query_rsPostul, $conndb3) or die(mysql_error());
$row_rsPostul = mysql_fetch_assoc($rsPostul);

【问题讨论】:

  • 请出示您的 PHP 代码。
  • Hi Pang,刚刚添加了 PHP 代码。

标签: php mysql


【解决方案1】:
  • 我没有看到您的代码中定义了GetSQLValueString()
    • 我猜它和this one一样?如果是这样,您的 PHP 代码看起来没问题,但与原始 SQL 不同(原始 SQL 中的 pos1_aluID='n' 与 PHP 的 SQL 中的 pos1_aluID=<some integer here>)。
    • 我建议你在你的 PHP (print $query_rsPostul;) 中打印出 SQL,复制并粘贴到 Workbench,然后运行它并检查它是否是你想要的。
  • 我看不到您如何在代码中使用 mysql_fetch_assoc() 的结果。

    • mysql_fetch_assoc() 只获取结果集的一行。要获取所有行,请使用循环,例如

      while ($row_rsPostul = mysql_fetch_assoc($rsPostul)) {
          // Do something with $row_rsPostul here.
      }
      

编辑(2012-12-16):

  • 也许您的查询结果中有同名的列?

    • 您需要使用列别名,例如

      SELECT region1.REGION_ID as region1_REGION_ID,
             region2.REGION_ID as region2_REGION_ID,
             region3.REGION_ID as region3_REGION_ID,
             ....
      

      然后您可以使用$row_rsPostu["region1_REGION_ID"]$row_rsPostu["region2_REGION_ID"] 等方式访问它们。

  • 也许您没有为您的数据库连接设置字符集?

  • 仔细检查您的数据库名称 ($database_conndb3) 和连接参数(即您在 mysql_connect() 中输入的参数。确保它们与您在 Workbench 中使用的相同。

    李>

最后,请注意,PHP 中的旧 mysql 扩展自 PHP 5.5.0 起已被弃用,将来将被删除。见

【讨论】:

  • * 是的,function GetSQLValueString() 是 Dreamweaver 使用的典型代码,原始代码类似于 pos1_aluID=%s,但是我使用了 n 来表明它可以获取任何记录 ID。 * 我已经多次将代码复制并粘贴到 Workbench 中,但结果不正确。 * 因为我只需要得到一行,所以这是完成它的代码:$rsPostul = mysql_query($query_rsPostul, $db3) or die(mysql_error());$row_rsPostul = mysql_fetch_assoc($rsPostul);* 是的,我知道 mysql 扩展已被弃用,我需要更改它。
  • 编辑了我的答案,添加了更多可能的解决方案。
猜你喜欢
  • 1970-01-01
  • 2013-08-26
  • 1970-01-01
  • 2018-06-19
  • 1970-01-01
  • 2018-03-11
  • 2013-03-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多