php pdo 准备语句动态过滤器

标签 php mysql pdo

我想对 pdo 语句使用简单的过滤器。以前我使用下面的代码。

$sql = "select * from cities where 1 ";
$city = $_REQUEST['city_name'];
if($city!=""){
   $sql = $sql. " and name ='".$city."'";

 } 
 $country = $_REQUEST['country_name'];
if($country!=""){
   $sql = $sql. " and country_name ='".$country."'";

 } 

$result= mysql_query($sql);

如果没有名称或国家名称,我想使用过滤器,它应该显示所有结果,如果选择名称,则只有城市名称结果会出现。如果选择国家/地区,则国家/地区将适用,否则国家/地区过滤器将不适用。

现在我想将 same 与 pdo 准备好的语句一起使用,但我不知道如何创建它。

$db = new PDO('mysql:host=localhost;dbname=testdb;charset=utf8', 'username', 'password');

最佳答案

试试这个。 $dynamic_fields 必须在键中包含 mysql 字段名称,在值中包含输入名称:

// mysql_fileld_name => request_key_name
$dynamic_fields = array(
    'name'         => 'city_name',
    'country_name' => 'country_name'
);
$field_values = array();
foreach ($dynamic_fields as $mysql_fname => $input_fname) {
    if (!empty($_REQUEST[ $input_fname ])) {
        $sql .= ' AND `' . $mysql_fname . '` = :' . $mysql_fname; 
        $field_values[ ':' . $mysql_fname ] = $_REQUEST[ $input_fname ];
    }
}

$pdo = new PDO('mysql:host=localhost;dbname=testdb;charset=utf8', 'username', 'password');
$statement = $pdo->prepare($sql);
$statement->execute($field_values);

$result = $statement->fetchAll();

关于php pdo 准备语句动态过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21106975/

相关文章:

php - 通知: Undefined index ajax

php - 在查询中使用 PDO 准备语句和 LIMIT 时出错

php - 我可以根据结果数将我的 MySQL 查询重构为一个查询吗?

php - composer.lock 中的 shasum 是什么?

mysql - 加载数据本地 infile ERROR 2 找不到文件

php - 为 SilverStripe 站点自动填充站点树项目

mysql - 如何设置从本地 MySQL 到 Azure PostgreSQL 数据库的复制

php - 如何在 php pdo 中使用 2 个表获取 1 个表用户详细信息?

php - 从未存储在 mysql 中的 PHP 中获取 TOTAL 值的排名

php - 从数据库获取表名并输出到html表供下载