猿问

PHP - 组织 MySQL 查询以创建条件表单的最有效方式

所以我正在创建一个条件表单,其中选项根据先前的选择填充。


例如,考虑一个基本示例:


国家 = [列表]


城镇 = [列表]


街道 = [列表]


人们可能想查询他们的数据库以找到与所选国家相对应的所有城镇。


一旦选择了一个城镇,他们就会想要查询他们的数据库以找到与所选城镇对应的所有街道。


但是,我不确定为此组织 MySQL 调用的最佳方式。


例如,我创建了一个通过 XMLrequest 触发的函数,例如:


function getTowns($country){


global $conn;


$sql = "SELECT distinct town from example_table where country=".$country;

$rs = mysqli_query($conn, $sql);

$row = mysqli_fetch_assoc($rs);


return $row;

}

然后我可以使用返回的行填充城镇选项。


但是,我不确定这是否是最有效的,因为我认为一旦选择了城镇,我就需要有另一个功能来选择街道:


function getStreets($town){


global $conn;


$sql = "SELECT distinct street from example_table where town=".$town;

$rs = mysqli_query($conn, $sql);

$row = mysqli_fetch_assoc($rs);


return $row;

}

在一个表单中有很多输入,这将导致很多功能,所以这让我质疑我最初想法的效率。


因此我问:是否有更有效的方法从 MySQL 获取具有多个选项的条件形式的数据?


理想情况下,我在想是否有可能一次从数据库及其相关街道中获取所有城镇,这样一旦选择了一个城镇,街道中的选项就会自动填充,而无需进一步查询数据库。


希望这是有道理的,我对编程和堆栈溢出还很陌生,所以希望这没问题。


侃侃尔雅
浏览 131回答 2
2回答

牛魔王的故事

这个问题的解决方案本质上是主观的。解决这个问题的方法可能因程序员而异。从我的角度来看,是否应该取决于你的表的数据大小。如果它是一小组数据,那么您加载组合数据的方法会更有效。您可以将它存储在 JSON 中,然后使用 JS 函数处理它,而不是每次选择城镇时都进行 AJAX 调用。这将保存您的 API 调用和 SQL 查询。如果数据大小更大,那么以前的方法会增加页面的加载时间,因此最好在服务器端创建多个函数并在每次选择时进行 AJAX 调用。如果您使用第二种方法,请不要将输入值直接传递给会打开 SQL 注入漏洞的查询。

胡子哥哥

你走在正确的轨道上。如果您尝试一次发送所有内容,这将使您的代码更加复杂和难以维护,并且会占用更多的网络带宽。您的查询容易受到 SQL 注入攻击。您可以使用参数化查询来解决此问题。https://www.php.net/manual/en/pdo.prepare.php
随时随地看视频慕课网APP
我要回答