mysqli php表名用连字符或空格

时间:2013-05-30 13:29:20

标签: php mysqli names

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

有一个简单的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): 表'florida.palm'不存在73

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

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

2 个答案:

答案 0 :(得分:0)

您的数据库结构错误。

必须是 ONE 表,其中country是其他列中的字段。

所以,代码必须像这样

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>";
    }
}

答案 1 :(得分:-1)

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

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

修改

此外,您应该查看prepared statements以避免sql注入。

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