[英]How to dynamically select a table from mysql using PHP
我创建了一个 html,它有一个让您在四个不同选项之间进行选择的公式:
<select name="especie">
<option value = "1"> Hyundai </option>
<option value = "2"> Renault </option>
<option value = "3"> Ford </option>
<option value = "4"> Fiat </option>
</select>
这些选项中的每一个都对应于 mySQL 数据库(假设它称为公司)中的一个表,并且具有相同的变量。 html 然后让您执行查询,我希望它根据您之前选择的表格显示信息。
$query = "SELECT * FROM $table WHERE brand LIKE ´%$brand%´;";
所以我想要的是创建一个 PHP 根据用户选择的选项(在第一个代码块中)动态选择表($table)。
任何帮助将不胜感激。
在不重新设计数据库结构的情况下——这可能是最好的做法,有两种简单的方法可以做到这一点。 你基本上可以按照你说的做。 如果选择此方法,您需要确保该表是由表数组中的一个键选择的,因此它是一个安全输入,如下所示:
$tables = ["table1" => "table1","table2" =>"table2"];
$query = "SELECT * FROM ".$tables[$table_key_from_input]." WHERE brand LIKE ´%$brand%´;";
但这并不理想,因为当添加表时,所有类似这样的代码都需要更新。
获得所需结果的另一种方法是创建一个数据库视图,它是所有表的联合(加上额外列中的表名),然后每次使用表作为由用户输入。
您可以在此处了解视图: https://www.w3schools.com/sql/sql_view.asp
并在此处查看如何建立联合: https://www.w3schools.com/sql/sql_union.asp
视图代码看起来有点像这样:
CREATE VIEW view_name AS
SELECT *, 'table1' AS 'table' FROM table1
UNION
SELECT *, 'table2' AS 'table' FROM table2
那么您的查询将是这样的:
$query = "SELECT * FROM view_name WHERE brand LIKE ´%$brand%´ AND table = $table;";
(但理想情况下使用 PDO!)
此外,如果您这样做,如果您重新考虑您的数据库结构,并且可能执行 El_Vanja 在评论中建议的操作,并且通过删除视图并为表提供相同的名称,代码甚至不必更改!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.