【问题标题】:Create form search using PDO [duplicate]使用 PDO 创建表单搜索 [重复]
【发布时间】:2012-12-02 04:56:24
【问题描述】:

可能重复:
PDO with “WHERE… IN” queries

在我的搜索表单中,有很多复选框和字段。
一些复选框属于该组。
示例组,城市。
如下查询

SELECT id, city_id, area, city FROM an_objects  
                WHERE livedays > 0 AND type_id = :typeoffer AND rubric_id = :typerelaty 
                AND CASE 
                    WHEN :1r = '' THEN true 
                    ELSE city_id IN (:1r, :2r, :99r, :100r)
                END
                GROUP BY id ORDER BY date ASC

在这个例子中,需要填写4个参数,也就是一百个。
但是我想做

SELECT id, city_id, area, city FROM an_objects  
            WHERE livedays > 0 AND type_id = :typeoffer AND rubric_id = :typerelaty 
            AND CASE 
                WHEN :1r = '' THEN true 
                ELSE city_id IN (:arrCity)
            END
            GROUP BY id ORDER BY date ASC

字符串形式的so

if(isset($param['city']))
{
    for($i=0; $i < 9; $i++)
    {
        if(isset($param['city'][$i]))
            $raion .= $param['city'][$i] . ",";
        else
            break;
    }
    $arrCity = substr($city, 0, -1);        
}

我们将以下
(:arrCity) 替换为 ("1,2,3,4,5,6")。 这是作为单个字符串获得的,但是如何执行以下操作
(: arrCity) (1,2,3,4,5,6)

【问题讨论】:

  • 当然这不是重复的,但谁在乎...

标签: php mysql pdo


【解决方案1】:

这是一个有趣的问题,它清楚地证明了 PDO 比旧的 mysql_* 使用起来更麻烦,并且没有为现实生活中的各种查询提供良好的安全性。

为了使这些任务更容易,数据库访问库应该允许两个主要的事情:

  • 要在内部处理的复杂数据类型的其他占位符。
  • 在任意查询部分处理占位符,而不是仅在整个查询中处理

并且 PDO 都失败了。
因此,程序员必须自己照顾它们。

因此,通过使用实现这些原则的库,代码将既短又安全:

if(isset($param['city']))
{
    $raion = $db->parse("AND (city_id IN (?a)", $param['city']);
}
//  you can add any number of such conditions making your search flexible
// the only thing you have to keep in mind: add a value ONLY via placeholder

$sql = "SELECT id, city_id, area, city FROM an_objects  
       WHERE livedays > 0 AND type_id = ?i AND rubric_id = ?i
       ?p
       GROUP BY id ORDER BY date ASC";
$data = $db->getAll($sql, $typeoffer, $typerelaty, $raion);

是的,只有这几行简洁易读的代码!

如果我误解了您的条件 - 请随时询问更多详细信息,并提供构建查询的确切逻辑。我很乐意根据您的条件编写确切的代码,只是为了展示我正在谈论的库的强大功能。

【讨论】:

  • 你我理解正确。但这个人是图书馆吗?无论如何,谢谢!你给了我一个有趣的想法。
  • 它是我写的,但任何人都可以免费使用。您可以在我的用户信息中找到该链接。或者,欢迎您使用您认为有用的任何想法。
  • 谢谢。好在有像你这样的爱好者。如此独特的创作准备免费提供,世界编程会更好。谢谢你给我写信。我已经在使用您的库,并且在我的应用程序中减少了 300 多行代码))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-20
  • 2023-03-03
  • 1970-01-01
  • 2014-01-07
  • 1970-01-01
  • 2014-05-24
  • 2013-11-03
相关资源
最近更新 更多