php mysql基于IF语句向数组添加值
使用Joomla时,在尝试基于URL参数构建mySQL查询时遇到问题。我的代码如下所示:php mysql基于IF语句向数组添加值,php,mysql,joomla,Php,Mysql,Joomla,使用Joomla时,在尝试基于URL参数构建mySQL查询时遇到问题。我的代码如下所示: $db =& JFactory::getDBO(); $hpprice = JRequest::getVar('hprice'); $lprice = JRequest::getVar('lprice'); $city = JRequest::getVar('city'); $zip = JRequest::getVar('zip'); $bdrms
$db =& JFactory::getDBO();
$hpprice = JRequest::getVar('hprice');
$lprice = JRequest::getVar('lprice');
$city = JRequest::getVar('city');
$zip = JRequest::getVar('zip');
$bdrms = JRequest::getVar('bdrms');
$bths = JRequest::getVar('bths');
$query = "SELECT * FROM " . $db->nameQuote('#__mls') . " WHERE 1=1";
$clauses = array();
if ($zip != null) {
$clauses[] = $db->nameQuote('MSTZIP') . " = " . $db->quote($zip);
}
if ($city != null) {
$clauses[] = $db->nameQuote('MSTCITY') . " = '" . $db->quote($city) . "'";
}
if ($bdrms != null){
$clauses[] = $db->nameQuote('MSTBDRMS')." >= ".$db->quote($bdrms);
}
if ($bths != null){
$clauses[] = $db->nameQuote('MSTBATHS') . " >= " . $db->quote($bths);
}
if ($lprice != null){
$clauses[] = $db->nameQuote('MSTLISTPRC') . " BETWEEN " . $db->quote($lprice) . " AND " . $db->quote($hprice);
}
$query .= implode(" AND ", $clauses);
$db->setQuery($query);
$table = $db->loadRowList();
return $table;
$db =& JFactory::getDBO();
$hprice = JRequest::getVar('hprice');
$lprice = JRequest::getVar('lprice');
$city = JRequest::getVar('city');
$zip = JRequest::getVar('zip');
$bdrms = JRequest::getVar('bdrms');
$bths = JRequest::getVar('bths');
$query = "SELECT * FROM " . $db->nameQuote('#__mls') . " WHERE 1=1 AND ";
$clauses = array();
if ($zip != null) {
$clauses[] = "MSTZIP = " . $zip;
}
if ($city != null) {
$clauses[] = "MSTCITY = " . $db->quote($city);
}
if ($bdrms != null){
$clauses[] = "MSTBDRMS >= " . $bdrms;
}
if ($bths != null){
$clauses[] = "MSTBATHS >= " . $bths;
}
if ($lprice != null){
$clauses[] = "MSTLISTPRC BETWEEN " . $lprice . " AND " . $hprice;
}
$query .= implode(" AND ", $clauses) . ";";
$db->setQuery($query);
$table = $db->loadRowList();
return $table;
因此,正如您所看到的,根据URL中是否存在Aruments,将参数添加到mySQL查询中。我无法理解的是构建阵列并使其内爆
每当我在URL中放入参数时,所有表项都会填充。当我试图传递一个参数时,结果是空的。你可以在行动中看到这一点。如果在URL中添加另一个参数,如zip,则所有参数都为空。我认为问题在于这里1=1。尝试将其更改为-WHERE 1=1。 因为最终的查询将附加到此查询之后,您将无法获得所需的结果。为了确认,请同时echo$query查看它是否是正确的查询。还有一件事是'$db->报价$city'。删除,因为您已经通过一个函数添加了它 //更新: 更好的使用方法
如果这不起作用,请告诉我。不确定这与您之前的问题有什么不同 $query->select'*; $query->from$db->nameQuote''uuu mls'
$query->where('1 = 1', AND);
if ($zip != null)
{
$query->where (.$db->nameQuote('MSTZIP')." = ".$db->quote($zip));
}
if ($city != null)
{
$query->where($db->nameQuote('MSTCITY')." = '".$db->quote($city));
}
Etc
您无需构建任何阵列;这就是拥有databasequery api的全部意义。最终脚本的外观如下:
$db =& JFactory::getDBO();
$hpprice = JRequest::getVar('hprice');
$lprice = JRequest::getVar('lprice');
$city = JRequest::getVar('city');
$zip = JRequest::getVar('zip');
$bdrms = JRequest::getVar('bdrms');
$bths = JRequest::getVar('bths');
$query = "SELECT * FROM " . $db->nameQuote('#__mls') . " WHERE 1=1";
$clauses = array();
if ($zip != null) {
$clauses[] = $db->nameQuote('MSTZIP') . " = " . $db->quote($zip);
}
if ($city != null) {
$clauses[] = $db->nameQuote('MSTCITY') . " = '" . $db->quote($city) . "'";
}
if ($bdrms != null){
$clauses[] = $db->nameQuote('MSTBDRMS')." >= ".$db->quote($bdrms);
}
if ($bths != null){
$clauses[] = $db->nameQuote('MSTBATHS') . " >= " . $db->quote($bths);
}
if ($lprice != null){
$clauses[] = $db->nameQuote('MSTLISTPRC') . " BETWEEN " . $db->quote($lprice) . " AND " . $db->quote($hprice);
}
$query .= implode(" AND ", $clauses);
$db->setQuery($query);
$table = $db->loadRowList();
return $table;
$db =& JFactory::getDBO();
$hprice = JRequest::getVar('hprice');
$lprice = JRequest::getVar('lprice');
$city = JRequest::getVar('city');
$zip = JRequest::getVar('zip');
$bdrms = JRequest::getVar('bdrms');
$bths = JRequest::getVar('bths');
$query = "SELECT * FROM " . $db->nameQuote('#__mls') . " WHERE 1=1 AND ";
$clauses = array();
if ($zip != null) {
$clauses[] = "MSTZIP = " . $zip;
}
if ($city != null) {
$clauses[] = "MSTCITY = " . $db->quote($city);
}
if ($bdrms != null){
$clauses[] = "MSTBDRMS >= " . $bdrms;
}
if ($bths != null){
$clauses[] = "MSTBATHS >= " . $bths;
}
if ($lprice != null){
$clauses[] = "MSTLISTPRC BETWEEN " . $lprice . " AND " . $hprice;
}
$query .= implode(" AND ", $clauses) . ";";
$db->setQuery($query);
$table = $db->loadRowList();
return $table;
我最终摆脱了nameQuote和quote,除非需要/适用。我使用的脚本模型来自某个教程。它为我以前所做的工作起了作用,但由于某些原因,现在不行了。最后一步是确定初始值和条件值,但这不需要花费太多时间。至少现在已经有了框架。感谢所有帮助您的人。您在尝试执行之前是否检查了生成的查询,例如echo$query;?您只需假设此代码正确构建查询。$query。='和'。内爆…我刚刚在原始$query语句的末尾添加了and。我猜名字引号就是添加引号的地方。还有其他函数可以用来提取这些信息吗?这应该不是问题,它只会在字段名周围添加反勾号。用最终查询文本更新问题,无法从注释中看到,因为它们会弄乱背景标记;在查询语句的末尾@马克B,你是故意的,不是吗;使用了不同的解决方案。谢谢你。