简化 SQL 查询的 PHP 脚本
我是一名自学成才的初学者程序员。最近我一直在编写一个 PHP 脚本来使用用户输入的关键字查询数据库。我想出的东西似乎比需要的要复杂得多,所以我想知道是否有一种方法可以简化我所写的内容。如果您有任何其他问题或需要更多代码,请告诉我。谢谢你!
$types = array();
if(!empty($_GET['location_id']) && isset($_GET['location_id'])) $types[] = "groups.location_id = " . str_replace(' ', '%', $_GET['location_id']) . " ";
if(!empty($_GET['season_id']) && isset($_GET['season_id'])) $types[] = "seasons.season_id = " . str_replace(' ', '%', $_GET['season_id']) . " ";
if(!empty($_GET['event']) && isset($_GET['event'])) $types[] = "(`event` LIKE '%" . str_replace(' ', '%', $_GET['event']) . "%' OR `note` LIKE '%" . str_replace(' ', '%', $_GET['event']) . "%') ";
if(!empty($_GET['place']) && isset($_GET['place'])) $types[] = "`place` LIKE '%" . str_replace(' ', '%', $_GET['place']) . "%' ";
if(!empty($_GET['city']) && isset($_GET['city'])) $types[] = "`city` LIKE '%" . str_replace(' ', '%', $_GET['city']) . "%' ";
if(!empty($_GET['state_abbr']) && isset($_GET['state_abbr'])) $types[] = "`state_abbr` LIKE '%" . str_replace(' ', '%', $_GET['state_abbr']) . "%' ";
if(!empty($_GET['weekday']) && isset($_GET['weekday'])) $types[] = "(`weekday` LIKE '%" . str_replace(' ', '%', $_GET['weekday']) . "%' OR `through_weekday` LIKE '%" . str_replace(' ', '%', $_GET['weekday']) . "%') ";
if(!empty($_GET['month']) && isset($_GET['month'])) $types[] = "`month` LIKE '%" . str_replace(' ', '%', $_GET['month']) . "%' ";
if(!empty($_GET['day']) && isset($_GET['day'])) $types[] = "(`day` LIKE '%" . str_replace(' ', '%', $_GET['day']) . "%' OR `through_day` LIKE '%" . str_replace(' ', '%', $_GET['day']) . "%') ";
if(!empty($_GET['year']) && isset($_GET['year'])) $types[] = "`year` LIKE '%" . str_replace(' ', '%', $_GET['year']) . "%' ";
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
由于您的
WHERE
条件如此不同,因此无法减少代码中的行数,但每行可能会稍微短一些。您还想通过mysql_real_escape_string() 传递提交的变量
以防止SQL注入攻击。您可以在循环中准备所有变量,这样您就不必在每一行上运行
mysql_real_escape
和str_replace
:我认为对
isset 的调用()
有点多余,因此在运行每行上方的循环后可能看起来像这样:Because your
WHERE
conditions are so different there wouldn't be any way of reducing the number of lines in the code but each line could be slightly shorter. Also you want to pass the submitted variables throughmysql_real_escape_string()
to prevent SQL injection attacks.You can prepare all of your variables in a loop so you don't have to run through
mysql_real_escape
andstr_replace
on each line:and I think the call to
isset()
is slightly redundant so after you've run the loop above each line could look something like this:只是一个想法..它可能会使代码更清晰,并且编写sql变得非常容易。
将此代码用于测试目的:
然后在其下方,放置实际代码:
再次用于测试目的:
这将输出此内容:
这样可以吗?
Just an idea.. It might make the code more clear and the sql writing a very easy job.
Put this code for testing purposes:
Then below that, put the actual code:
And for testing purpose again:
This will output this:
Is this okay?