PHP:错误的SQL语法错误
我有一个PHP类,它根据表单中输入的值创建SQL查询。我要走了 关键字“WHERE”附近的语法不正确 这是我的密码。问题发生在每个WHERE子句周围,顺便说一句,它们已经在处理SQL注入PHP:错误的SQL语法错误,php,sql,where-clause,syntax-error,Php,Sql,Where Clause,Syntax Error,我有一个PHP类,它根据表单中输入的值创建SQL查询。我要走了 关键字“WHERE”附近的语法不正确 这是我的密码。问题发生在每个WHERE子句周围,顺便说一句,它们已经在处理SQL注入 if($from != ''){ $from = date('Y-m-d H:i:s',strtotime($from)); } if($to != ''){ $to = date('Y-m-d H:i:s',strtotime($to));
if($from != ''){
$from = date('Y-m-d H:i:s',strtotime($from));
}
if($to != ''){
$to = date('Y-m-d H:i:s',strtotime($to));
}
$tsql = "SELECT COUNT(tblBackupArchive.StatusID) AS total, tblBackupArchive.StatusID ".
"FROM tblBackupArchive INNER JOIN ".
"tblBackup ON tblBackupArchive.BackupID = tblBackup.BackupID ".
"GROUP BY tblBackupArchive.StatusID, tblBackup.ClientID ";
if($from != '' && $to !=''){
$tsql .= "WHERE (tblBackupArchive.BackupDate BETWEEN '" . $from ."' AND '" . $to . "') ";
}
if($from != '' && $to=''){
$tsql .= " WHERE (tblBackupArchive.BackupDate > '" . $from ."') ";
}
if($to != '' && $from = ''){
$tsql .= " WHERE (tblBackupArchive.BackupDate < '" . $to ."') ";
}
if(isset($bmsid)){
$tsql .= "HAVING (tblBackup.ClientID = " . $bmsid . ")";
}
我对这些语法错误很反感:
有人能帮我吗
Jonesy您的WHERE子句必须位于GROUP BY子句之前。您不能将WHERE置于GROUP BY之后。您需要附加WHERE子句,然后在所有WHERE子句之后,将GROUP BY放在查询中。e、 g
$tsql = "SELECT COUNT(tblBackupArchive.StatusID) AS total, tblBackupArchive.StatusID ".
"FROM tblBackupArchive INNER JOIN ".
"tblBackup ON tblBackupArchive.BackupID = tblBackup.BackupID ";
if($from != '' && $to !=''){
$tsql .= "WHERE (tblBackupArchive.BackupDate BETWEEN '" . $from ."' AND '" . $to . "') ";
}
if($from != '' && $to=''){
$tsql .= " WHERE (tblBackupArchive.BackupDate > '" . $from ."') ";
}
if($to != '' && $from = ''){
$tsql .= " WHERE (tblBackupArchive.BackupDate < '" . $to ."') ";
}
if(isset($bmsid)){
$tsql .= "HAVING (tblBackup.ClientID = " . $bmsid . ")";
}
$tsql .= " GROUP BY tblBackupArchive.StatusID, tblBackup.ClientID ";
您的GROUPBY子句位于WHERE子句之前,这是一个问题。您还必须将HAVING子句移动到GROUPBY子句之后
更多信息将在文档中提供
MySQL:
PostgreSQL:
编辑:
此外,您应该在if子句中将$to=更改为$to==并将$from=更改为$from==我非常确信
$to=''
必须看起来像:
$to==''
这是逻辑问题,不是SQL,但仍然会返回奇怪的结果
更新:KM comment提醒了我一位同事,他建议将值写在左侧,将变量写在右侧,作为此问题的解决方案。代码如下所示:
$to==''
$x=;
如果5=$x{}//这将抛出一个错误
如果5==$x{}//则返回false
如果您能够提供生成并导致问题的实际查询,则会更有帮助$to={应该是if$from!=&&&$to={如果$to!=&&&$from={应该是if$to!=&&$from=={在php中,=意味着为变量赋值,而==意味着相等。即使您在代码中看到,…&&$to=$to被赋值为空字符串,并且没有检查是否有空字符串值。这会破坏代码的可读性。我知道这种做法很久了,但我自己从未使用过。