我正在尝试为mySQL数据库的单个表构建一个小型搜索工具。 可悲的是,我无法将我的函数参数绑定到我的sql语句,我无法弄清楚原因。
这就是我认为它的工作原理。(也许你可以在我的一般方法中发现错误)
我已经发现问题只发生在我尝试将参数绑定到语句时。所以介于步骤2-4之间。
每当我将$ field作为纯字符串插入(作为步骤2 + 5中的“title”)时,每个事情都可以正常工作。但那不是很动态,因此我不能使用函数参数。
那里有人可以给我一个提示:)? 我感谢任何帮助。
<?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];
}
}
}
&GT;
<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>
答案 0 :(得分:1)
bindParam
只能绑定值,而不能绑定对象名称(在您的情况下为列)或语法元素。如果要在like
运算符之前动态设置列的名称,则必须采用字符串操作:
$query = $dbh->prepare('SELECT * FROM docs WHERE $field LIKE :searchInput');
$query->bindParam(':searchInput',$searchInput);
$query->execute();