php - PDO -> bindParam() 不将变量绑定(bind)到 PDO -> prepare() 语句

标签 php mysql pdo

<分区>

我正在尝试为 mySQL 数据库的单个表构建一个小型搜索工具。 遗憾的是,我无法将我的函数参数绑定(bind)到我的 sql 语句,我也不知道为什么。

这就是我认为它的工作原理。(也许您可以发现我的一般方法中的错误)

  1. 首先,参数 ($field) 通过在文件底部的函数调用中引用它来传递给函数。
  2. 我在 $dbh->prepare() 语句中引用 $field (:field) 的参数键。
  3. 变量 $field 作为参数与 $query->bindParam() 绑定(bind)
  4. 正在执行查询
  5. $field 用于从修改后的查询中提取标题。

我已经发现只有当我尝试将参数绑定(bind)到语句时才会出现问题。所以介于步骤 2-4 之间。

每当我将 $field 作为纯字符串插入(作为“标题”进入步骤 2+5)时,一切正常。但这不是很动态,因此我不能使用 functions 参数。

有没有人可以给我提示:)? 我很感激任何帮助。

<?php
// establish connection to database
$dbh = new PDO($server, $user, $pass);

/* function takes PDO object and a string that defines the column of our table that is supposed to be returned */
function searchField($dbh,$field){

    if(isset($_POST['searchbar'])){

        $searchInput = $_POST['searchbar'];
        $searchInput = "%" . $searchInput . "%";
        // (2)
        $query = $dbh->prepare('SELECT * FROM docs WHERE :field LIKE :searchInput');
        // (3)
        $query->bindParam(':field',$field);
        $query->bindParam(':searchInput',$searchInput);
        // (4)            
        $query->execute();

        foreach ($query as $doc){
            // (5)
            return $doc[$field];

        }




    }

}

?>

<form action="index.php" method="post" class="search-form">
    <div class="searchbar-container">
       <input class="searchbar" name="searchbar" placeholder="Enter a filename..."></input>
       <button class="btn btn-default search-button " type="submit"><span class="glyphicon glyphicon-search submit-search" aria-hidden="true"></span></button>
    </div>
</form>


<div class="result-title-container">
    <?php

        // (1) ==== The function call ==== 

        echo "<h4>" . searchField($dbh,"title") . "</h4>";
    ?>
</div>

最佳答案

bindParam 只能绑定(bind),不能绑定(bind)对象名称(在您的情况下是一列)或句法元素。如果要在 like 运算符之前动态设置列名,则必须求助于字符串操作:

$query = $dbh->prepare('SELECT * FROM docs WHERE $field LIKE :searchInput');
$query->bindParam(':searchInput',$searchInput);
$query->execute();

关于php - PDO -> bindParam() 不将变量绑定(bind)到 PDO -> prepare() 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33189877/

相关文章:

php - mySQL按一定的ID排列。缺少一行数据

javascript - (php/jquery) 根据另一个选中的复选框值隐藏和显示复选框

mysql - 专业方式在数据库 Laravel 5.2 中添加数据

mysql - 查找平均值的 SQL 查询

php - 一对多搜索查询

PHP - PDO SQLSRV - 连接字符串无效 [87]

php - 使用pdo包装器类时未捕获到异常'PDOException'

php - 多个sql查询运行问题

php - Javascript window.onload 不会在每台计算机上加载

php - 如何在 Linux 上获取 Word 文档中的页数?