【问题标题】:Using result from one query to as a WHERE clause将一个查询的结果用作 WHERE 子句
【发布时间】:2013-03-05 20:44:10
【问题描述】:

我正在尝试通过一个查询获取邮政编码,并将其用于另一个查询的 where 子句。

<?php
$mobile = '07790807055';
//$mobile = $_POST['mobile'];


mysql_connect("", "", "") or die(mysql_error());
mysql_select_db("") or die(mysql_error());

$query =("SELECT POSTCODE FROM appregistration WHERE MOBILE_NUMBER = '$mobile'");
$result = mysql_query ($query) or die ("Unable to connect. " . mysql_error());
$row = mysql_fetch_array($result);
$postcode = $row['POSTCODE'];
/// gets postcode from appregistration table 

$sql=mysql_query("SELECT INCIDENT_ID, INVESTIGATION,TYPE_OF_INCIDENT,DESCRIPTION FROM appreports WHERE POSTCODE = '$postcode'");
//uses postcode from ppregistration table  to find info from appreports table 

while($row=mysql_fetch_assoc($sql)) $output[]=$row;

print(json_encode($output));

mysql_close();
?>

【问题讨论】:

  • 将您的查询分配给第二个查询之前的字符串并将其粘贴到此处。 $query2 = "SELECT INCIDENT_ID, INVESTIGATION,TYPE_OF_INCIDENT,DESCRIPTION FROM appreports WHERE POSTCODE = '$postcode'"; echo $query2; $sql=mysql_query($query2);
  • @mkaatman $sql 可能是资源,并且不能转换为字符串。
  • 排序后,查找数据库连接。
  • 谢谢 mkaatman ,这是输出资源 ID #4null
  • 这是输出 mkaarman "SELECT INCIDENT_ID, INVESTIGATION,TYPE_OF_INCIDENT,DESCRIPTION FROM appreports WHERE POSTCODE = 'CF14'null"

标签: php json phpmyadmin


【解决方案1】:

为什么不使用JOIN 而不是运行两个查询:

SELECT `INCIDENT_ID`, `INVESTIGATION`, `TYPE_OF_INCIDENT`, `DESCRIPTION`
FROM `appreports`
INNER JOIN `appregistration` ON `appreports`.`POSTCODE` = `appregistration`.`POSTCODE`
WHERE `appregistration`.`MOBILE_NUMBER` = '$mobile'

例如:

<?php
$mobile = '07790807055';

mysql_connect("", "", "") or die(mysql_error());
mysql_select_db("") or die(mysql_error());

$sql = mysql_query("SELECT `INCIDENT_ID`, `INVESTIGATION`, `TYPE_OF_INCIDENT`, `DESCRIPTION`
                    FROM `appreports`
                    INNER JOIN `appregistration` 
                    ON `appreports`.`POSTCODE` = `appregistration`.`POSTCODE`
                    WHERE `appregistration`.`MOBILE_NUMBER` = '$mobile'");

while($row=mysql_fetch_assoc($sql))
{
    $output[] = $row;
}

print(json_encode($output));

mysql_close();
?>

【讨论】:

  • 如果我使用 join "Parse error: syntax error, unexpected '`' on line 20,这是我遇到的错误
  • 我也想要 json 格式的输出,因为我将它用于我的 android 应用程序
  • 我没有收到这里的错误 - 你确定你复制的所有内容都正确吗?输出仍然是json_encode...
  • 您还应该被告知 mysql_* 已被弃用,您应该考虑至少使用 mysqli。
  • 我应付了一切,我得到“空”
【解决方案2】:

撇开明显的 SQL 注入漏洞、代码中可疑的注释(多余的标点符号)、不推荐使用的 API 和对 mysql_fetch_array() 调用中默认参数的依赖、不必要的拆分查询以及其他一些事情这应该在任何代码审查中被选中,但实际上并不会影响功能......你实际上并没有说当你运行代码时会发生什么。

第一个查询是否返回结果?

当您通过 mysql CLI 或 phpmyadmin 运行查询时会发生什么?

更新

如果我使用 join "Parse error: syntax error, unexpected '`' on line 20,这是我遇到的错误

好的,它是导致问题的 SQL 注入错误 - 我假设这是第 20 行:

$sql=mysql_query("SELECT INCIDENT_ID, INVESTIGATION,TYPE_OF_INCIDENT
      ,DESCRIPTION FROM appreports WHERE POSTCODE = '$postcode'");

$postcode 包含一个或多个单引号。逃脱它:

    $sql=mysql_query("SELECT INCIDENT_ID, INVESTIGATION,TYPE_OF_INCIDENT
      ,DESCRIPTION FROM appreports WHERE POSTCODE = '".
      mysql_real_escape_string($postcode) . "'");

【讨论】:

  • 感谢所有帮助,我发现了问题,当我使用 sql 在数据库中添加新行时它可以工作,但是当我使用 php 时它不起作用哈哈
猜你喜欢
  • 1970-01-01
  • 2012-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-07
  • 2021-01-17
  • 1970-01-01
  • 2021-05-20
相关资源
最近更新 更多