Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带连字符或空格的mysqli php表名_Php_Mysqli_Names - Fatal编程技术网

带连字符或空格的mysqli php表名

带连字符或空格的mysqli php表名,php,mysqli,names,Php,Mysqli,Names,该网站旨在按管辖区显示某些法律/规则 有一个简单的mysqli查询,查找县,然后在屏幕上显示县名称,如下所示: echo "><a href=\"index.php?sel_subj=" . urlencode($subject["county_name"]) . "\"> {$subject["county_name"]}</a></li>"; echo“>”; 然后单击一个县名称(嵌入链接),mysqli查询应该查找具有该县名称的表,并获取该县内

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

有一个简单的mysqli查询,查找县,然后在屏幕上显示县名称,如下所示:

echo "><a href=\"index.php?sel_subj=" . urlencode($subject["county_name"]) . "\">
{$subject["county_name"]}</a></li>";
echo“>”;
然后单击一个县名称(嵌入链接),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>";
    }
}
if(isset($\u GET['sel\u subm'])){
$query2=“从$sel_SUBK中选择*”;
$result2=$mysqli2->query($query2)或die($mysqli2->error.\uuuuuu行\uuuuu);
而($subject=mysqli\u fetch\u数组($result2)){
回声“”;
}
}
问题是有些县的名称包含空格或连字符。因此,当我单击带有连字符或空格的县时,出现了一个错误

当出现连字符(例如:Miami Dade)时,我会出现此错误: 您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以了解第173行使用near'-Dade'的正确语法

如果存在空间(例如:Palm Beach),则会出现此错误: 表“florida.palm”不存在73

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


有简单的解决方法吗?

您的数据库结构错误

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

所以,代码必须是这样的

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>";
    }
}
if(isset($\u GET['sel\u subm'])){
$query=“从国家=?”的文档中选择*;
$stmt=$mysqli->prepare($query)或trigger_error($mysqli->error);
$stmt->bind_param('s',$u GET['sel_subm']);
$stmt->execute();
$res=$stmt->get_result();
而($subject=mysqli\u fetch\u数组($res)){
回声“”;
}
}

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

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

此外,您还应该研究如何避免sql注入


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

您确定要为黑客提供这样大小的洞吗?您在哪里设置$sel的值_subj@Anigel也许全球变光器正在运行。其中,user2436671,您可能需要注意。@MaX这是可能的,但不太可能,因为在包含mysqli函数之前,register globals已默认禁用。True。他说,对于不包含特殊字符的名称,他得到了很好的结果,因此变量显然有一个值,只是给它一个猜测。请不要!mysqli\u real\u escape\u string not prepared语句都不能帮助阻止这里的注入我只是说。。。由于他特别需要动态表名,其中表名可能包含空格,所以您必须这样做。我并不是说这是一个很好的解决方案,但这正是他需要和要求的。谢谢你的投入。我见过很多人谈论sql注入和预处理语句,但不知道如何在脑海中构建这些东西。我只是从书籍、网页和字符串中提取代码片段来开发这个网站。你知道关于这些事情有什么好的教程或解释吗?你可以看看我在回答中发布的链接,学习如何使用预先准备好的语句。关于sql注入,有很多不同的内容需要阅读。只要去谷歌搜索一下,你就会找到很多资料。简而言之,这一切都是为了防止用户在sql语句中执行sql,通常是通过直接使用表单的输入?我现在有这个代码,但它不工作$stmt=$conn->prepare(“显示受试者的表格”)$stmt->execute()$stmt->store_result();while($stmt->fetch()):$table_name=ucwords($row[0]);回声“
  • ”;结束时;