首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PDO -> bindParam()不将变量绑定到PDO -> ->()语句。

PDO -> bindParam()不将变量绑定到PDO -> ->()语句。
EN

Stack Overflow用户
提问于 2015-10-17 18:05:24
回答 1查看 1.4K关注 0票数 1

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

这就是我认为的工作方式。(也许你可以在我的一般方法中发现一个错误)。

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

我已经知道只有当我试图将参数绑定到语句时才会出现问题。所以在第2-4步之间。

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

有没有人能给我一个提示:)?我非常感谢你的帮助。

代码语言:javascript
复制
<?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];

        }




    }

}

?>

代码语言:javascript
复制
<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>
EN

回答 1

Stack Overflow用户

发布于 2015-10-17 18:09:25

bindParam只能绑定,而不能绑定对象名称(在您的示例中是列)或语法元素。如果要在like运算符之前动态设置列名,则必须使用字符串操作:

代码语言:javascript
复制
$query = $dbh->prepare('SELECT * FROM docs WHERE $field LIKE :searchInput');
$query->bindParam(':searchInput',$searchInput);
$query->execute();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33189877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档