首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这个SQL查询有什么问题?

这个SQL查询有什么问题?
EN

Stack Overflow用户
提问于 2012-11-11 04:11:45
回答 1查看 58关注 0票数 2

我已经有几年没有编写PHP/SQL了,我需要为一个项目这样做。现在我遇到了一个问题。

我想在特定日期之间从MySQL数据库中抓取一些数据。如果像这样写它,它工作得很好:

代码语言:javascript
复制
$result = mysql_query("SELECT * FROM acw WHERE team = '".$team."' and added between '2012-11-05' and '2012-11-10' ");

但我想从URL中获取日期,并编写了以下代码:

代码语言:javascript
复制
$periods = $_GET["per"];

if ( $periods == 1 ) {
$period = "and added between '2012-11-05' and '2012-11-10'";
} 
elseif ( $periods == 2 ) {
$period = "and added between '2012-11-11' and '2012-11-17'";
} 
elseif ( $periods == 3 ) {
$period = "and added between '2012-11-05' and '2012-11-10'";
} 

echo $period;

如果我回显$period,我在超文本标记语言中得到了正确的输出,但是当我试图将它插入到我的MySQL问题中时,我什么也没有得到,我做错了什么?

代码语言:javascript
复制
$result = mysql_query("SELECT * FROM acw WHERE team = '".$team."' '".$period."' ");

所以这出了点问题,我自己解决不了:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-11 04:13:30

$period中的字符串是一个完整的SQL块,而不是带引号的字符串文字。因此,删除它周围的单引号。

代码语言:javascript
复制
$result = mysql_query("SELECT * FROM acw WHERE team = '". $team ."' " . $period);
//---------------No quotes here----------------------------------------^^^^^^^^^^

注意:我们假设如果$team源自用户输入,那么已经通过mysql_real_escape_string()对SQL注入进行了适当的转义。

建议总是通过echo输出字符串来调试您的SQL语句。

代码语言:javascript
复制
SELECT * FROM acw WHERE team = 'The Team' 'and added between '2012-11-05' and '2012-11-10''

最后一句忠告-除非在这里没有发布的代码中已经完成了这项工作,否则在尝试使用$_GET['per']之前,请验证是否设置了它:

代码语言:javascript
复制
// Set $periods to the $_GET value or defualt to 1 if it isn't set (or whatever value)
$periods = isset($_GET["per"]) ? $_GET['per'] : 1;
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13325666

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档