我正在尝试编写一个返回sql
语句
像
function get_sql($name=0,$date_start=0,$date_end=0)
{
$addQuery=" where 1=1";
if($name>0)
{
$addQuery .=" and name=".$name;
}
if($date_start>0)
{
$addQuery.=" and date >=".$date_start;
}
if($date_end >0)
{
$addQuery.=" and date<=".$date_end;
}
$query="select * from TABLE_ARTICLE".$addQuery;
return $query;
}
对不起家伙错误的语法输入
我对这个功能有两个担忧。
01/03/2012
格式传递时,此功能是否有效,因为如果两个日期都被选中,并且在第一个日期之后或结束日期之前,我会想要两个日期之间的结果?我的意思是这是从日期中的sql获取数据的最佳方法吗?
感谢您的帮助
答案 0 :(得分:2)
你可能最好使用implode
function get_sql($name=0,$date_start=0,$date_end=0)
{
$whereClauses = array();
if($name>0)
{
$whereClauses[] = "name='$name'";
}
if($date_start>0)
{
$whereClauses[] = "date >='$date_start'";
}
if($date_end >0)
{
$whereClauses[] = "date<='$date_end'";
}
$query="select * from TABLE_ARTICLE";
if( !empty( $whereClauses ) )
{
$query.= ' WHERE ' . implode( ' AND ', $whereClauses );
}
return $query;
}
另请注意,我引用了所有值,因为它们似乎都不是整数值。
关于日期格式,MySQL将无法识别您声明的格式。您需要以YYYY-MM-DD(或可能是unix时间戳)格式向MySQL提供日期。
答案 1 :(得分:1)
1)不。你要覆盖字符串。我认为你的意思是$ blah。='blah';
2)不。它不会在引号中,因此MySQL会尝试将其解析为数字或实体名称。然后,如果它在引号中,那将是MySQL的无效格式化日期。
date()是你的朋友。
哦,而且,在SQL中它是1 = 1,而不是1 == 1.而且真的没有必要在这里使用,虽然我猜它有点使字符串构建更容易。 (我可能会构建一个数组并将其内爆,但这会更慢/更复杂。)
答案 2 :(得分:1)
1)使用“=”而不是“==”
$addQuery=" where 1==1"; => $addQuery=" where 1=1";
2)如果它们是字符串或字符类型,则正确引用值:
$addQuery=" and name=".$name; => $addQuery=" and name='".$name."'";
3)检查数据库表中的日期格式和php变量使用date_format()
或date()
使它们相同
功能。
4)如果你想一次检查所有条件,那么做正确的concatenation
如:
if($name>0) { $addQuery.=" and name=".$name; }
if($date_start>0){ $addQuery.=" and date >=".$date_start; }
......
答案 3 :(得分:0)
您需要在$ addquery中添加其他条件,因此您必须执行以下操作:
$addQuery .=" and name=".$name;
$addQuery .=" and date >=".$date_start;
$addQuery .=" and date<=".$date_end;
答案 4 :(得分:0)
我就是这样做的:
function get_sql($name = null, $date_start = null, $date_end = null)
{
$where = array();
if($name !== null)
{
$where[] = "name='".mysql_real_escape_string($name)."'";
}
if($date_start !== null)
{
$where[] = "date >= STR_TO_DATE('".$date_start."', '%d/%m/%Y')";
}
if($date_end !== null)
{
$where[] = "date <= STR_TO_DATE('".$date_end."', '%d/%m/%Y')";
}
$query = "select * from TABLE_ARTICLE";
if( count($where) > 0 ) {
$query .= " WHERE ".implode(' AND ', $where);
}
return $query;
}