【问题标题】:showing data from database using bindParam使用 bindParam 显示数据库中的数据
【发布时间】:2017-12-31 02:16:37
【问题描述】:

我想尝试使用 bindParam 从数据库中显示我的数据,但我遇到了一些错误。

可恢复的致命错误:无法将 PDOStatement 类的对象转换为第 15 行 C:\xampp\htdocs\piratefiles\search.php 中的字符串

这是我的代码

$category = htmlentities($_GET['c']);
$query = htmlentities($_GET['q']);

$page = (isset($_GET['page'])) ? $_GET['page'] : 1;
$limit = 20;
$limit_start = ($page - 1) * $limit;

$query = $db->prepare ("SELECT * FROM `posting` WHERE 'category' = :category AND 'file_name' like :query ORDER BY date DESC LIMIT ".$limit_start.",".$limit);

$query->bindParam(":category", $category);
$query->bindParam(":query", $query);

$query->execute();

【问题讨论】:

  • 你正在用你准备好的语句覆盖$query-变量。首先是$query = htmlentities($_GET['q']);,然后是$query = $db->prepare(...),最后是$query->bindParam(":query", $query);。对不同的事物使用不同的变量名。
  • 啊,我忘了。谢谢。但我使用LIKE 添加了一些代码。编辑我的问题。现在工作正常。

标签: php mysql bindparam


【解决方案1】:

$query 是用户输入,然后将其分配为 PDOStatement,然后将其传递回 bindParam

更改变量名称。

$category = htmlentities($_GET['c']);
$query = htmlentities($_GET['q']);

$page = (isset($_GET['page'])) ? $_GET['page'] : 1;
$limit = 20;
$limit_start = ($page - 1) * $limit;

$stmt = $db->prepare ("SELECT * FROM `posting` WHERE 'category' = :category AND 'file_name' like :query ORDER BY date DESC LIMIT ".$limit_start.",".$limit);

$stmt->bindParam(":category", $category);
$stmt->bindParam(":query", $query);

$stmt->execute();

【讨论】:

    【解决方案2】:

    由于我使用LIKE所以,需要制作另一个变量。

    $keyword1 = "%".$category."%";
    $keyword2 = "%".$query1."%";
    

    这是完整的代码。

    $category = htmlentities($_GET['c']);
    $query1 = htmlentities($_GET['q']);
    
    $page = (isset($_GET['page'])) ? $_GET['page'] : 1;
    $limit = 20;
    $limit_start = ($page - 1) * $limit;
    
    $query = $db->prepare ("SELECT * FROM `posting` WHERE category LIKE :category AND file_name LIKE :query1 ORDER BY date DESC LIMIT ".$limit_start.",".$limit);
    
    $keyword1 = "%".$category."%";
    $keyword2 = "%".$query1."%";
    
    $query->bindParam(":category", $keyword1);
    $query->bindParam(":query1", $keyword2);
    
    $query->execute();
    

    【讨论】:

    • 是的,没关系,您也可以使用 bindValue 而无需定义其他临时变量,甚至传递一个包含所有内容的数组来执行。但这不是最初的问题。
    猜你喜欢
    • 2015-12-31
    • 2013-12-21
    • 2017-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多