php - 仅在发布数据时显示 PDO BindParam

标签 php mysql pdo

您好,这很可能是一个非常简单的答案,但我想知道如何仅在变量不为空时运行 BindParam 下面是一些示例代码:

// Adds variable name from input POST
$post_status = filter_input(INPUT_POST, 'search_status', FILTER_SANITIZE_STRING);
$post_firstname = filter_input(INPUT_POST, 'search_firstname', FILTER_SANITIZE_STRING);

$query = 'SELECT * FROM candidate_information WHERE status = :status ';

//Checks to see if post is empty
if(!empty($post_firstname)) {
    $query .= 'AND firstname LIKE :firstname';
    $post_firstname = '%'.$post_firstname.'%';
}

$stmt_main_table = $db->prepare($query);
$stmt_main_table->bindParam(':status', $post_status, PDO::PARAM_INT);
// Need a way to only call bindParam if $post_firstname is not empty
$stmt_main_table->bindParam(':firstname', $post_firstname, PDO::PARAM_STR);

$stmt_main_table->execute();

我知道我总是可以将 bindParam 包装在 if(!empty($post_firstname)) { } 中,但我不确定这是否是正确的方法,因为最终我想要添加多个搜索选项。

最佳答案

在这种情况下,我通常不会使用 bindParam

相反,我用必要的键值对填充一个数组并将其发送到 execute():

$query = 'SELECT * FROM candidate_information WHERE status = :status ';
$params = array(':status' => $post_status);

//Checks to see if post is empty
if(!empty($post_firstname)) {
    $query .= 'AND firstname LIKE :firstname';
    $params[':firstname'] = '%'.$post_firstname.'%';
}

// etc.

$stmt_main_table = $db->prepare($query);
$stmt_main_table->execute($params);

关于php - 仅在发布数据时显示 PDO BindParam,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26684661/

相关文章:

由于 "double port"- 未捕获的 PDOException : SQLSTATE[HY000] [2002],PHP PDO 初始化失败

php - 如何在netbeans 7.4中配置PHP编码规则

php - 从 msqli::multi_query 取回行时遇到问题

php - 星级评定,实现威尔逊评分区间

mysql - 触发器更新另一个表的计数器

mysql - 将 SQL 结果格式化为数组;按键访问?

php 数据库最少 4 个字母?

mysql - Django 分页和注释

mysql - 在新模型上设置 ID

php - 如何使用准备好的语句通过 PDO sqlsrv 设置获取和偏移值?