0

该网站旨在按司法管辖区显示某些法律/规则。

有一个简单的 mysqli 查询可以找到县,然后在屏幕上显示县名:

echo "><a href=\"index.php?sel_subj=" . urlencode($subject["county_name"]) . "\">
{$subject["county_name"]}</a></li>";

然后单击县名(嵌入链接),mysqli 查询应该查找具有该县名的表并获取该县内的所有司法管辖区。

if (isset($_GET['sel_subj'] )){
  $query2 = "SELECT * FROM $sel_subj";
  $result2 = $mysqli2->query($query2) or die($mysqli2->error.__LINE__);
    while ($subject = mysqli_fetch_array($result2)) {
      echo "<li";
      echo "><a href=\"index.php?sel_page=" . urlencode($subject["muni_name"]);
      echo "&sel_subj=" . urlencode($sel_subj). "\">
      {$subject["muni_name"]}</a></li>";
    }
}

问题是某些县名包含空格或连字符。因此,当我单击带有连字符或空格的县时,会出现错误。

出现连字符时出现此错误(例如:Miami-Dade):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 173 行的“-Dade”附近使用正确的语法

当有空格时出现此错误(例如:Palm Beach):Table 'florida.palm' doesn't exist73

如果县只是一个没有任何特殊字符的字符串,那么显示辖区没有问题。

有一个简单的解决方案吗?

4

2 回答 2

0

您的数据库结构错误。

它必须是一张表,其中国家是其他列中的一个字段。

所以,代码必须是这样的

if (isset($_GET['sel_subj'] )){
  $query = "SELECT * FROM documents WHERE country = ?";
  $stmt  = $mysqli->prepare($query) or trigger_error($mysqli->error);
  $stmt->bind_param('s',$_GET['sel_subj']);
  $stmt->execute();
  $res = $stmt->get_result();
  while ($subject = mysqli_fetch_array($res)) {
      echo "<li";
      echo "><a href=\"index.php?sel_page=" . urlencode($subject["muni_name"]);
      echo "&sel_subj=" . urlencode($sel_subj). "\">
      {$subject["muni_name"]}</a></li>";
    }
}
于 2013-05-30T13:36:39.210 回答
-1

如果你的县名包含这样的字符,你必须包装你的县名。但是,您还需要清理您的输入:

$query2 = "SELECT * FROM `".mysqli_real_escape_string ($sel_subj)."`";

编辑:

此外,您应该查看准备好的语句以避免 sql 注入。

您应该通过将可以定义的表名限制为包含县信息的表名来进一步清理您的输入。

于 2013-05-30T14:07:47.180 回答