我正在使用数据表,并且正在尝试创建自定义 WHERE 子句。我有以下代码:
$sWhere = "WHERE office=".$varOffice;
if ( isset($_GET['sSearch']) && $_GET['sSearch'] != "" )
{
$sWhere = "WHERE (";
for ( $i=0 ; $i<count($aColumns) ; $i++ )
{
if ( isset($_GET['bSearchable_'.$i]) && $_GET['bSearchable_'.$i] == "true" )
{
$sWhere .= "`".$aColumns[$i]."` LIKE '%".mysql_real_escape_string( $_GET['sSearch'] )."%' OR ";
}
}
$sWhere = substr_replace( $sWhere, "", -3 );
$sWhere .= ') AND office='.$varOffice;
}
经过调试,我发现MySQL抛出错误。错误 1605。
我决定回显此处找到的$sQuery
:
$sQuery = "
SELECT SQL_CALC_FOUND_ROWS `".str_replace(" , ", " ", implode("`, `", $aColumns))."`
FROM $sTable
$sWhere
$sOrder
$sLimit
";
然后我发现错误是因为 WHERE 子句没有引号,如下所示:
SELECT SQL_CALC_FOUND_ROWS `amount_due_owed`, `amount_paid`, `amount_remaining`, `reference_number` FROM accounting WHERE office=Office 1
应该是:
WHERE office='Office 1'
我一直在尝试,但一直没能弄清楚。我该如何获得变量周围的单引号?
最佳答案
在第一行添加单引号:
$sWhere = "WHERE office='".$varOffice."'";
另外:如果您只是在 SQL 查询中插入随机 $_GET
变量,您最终会得到 bad time 。请使用PDO或者更安全一些的东西(甚至 mysql_real_escape_string() 也不是那么安全。)。
关于php - 创建自定义 WHERE 子句以过滤数据表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14267561/