Php 使用pdo代码执行搜索

Php 使用pdo代码执行搜索,php,pdo,Php,Pdo,我有一个pdo代码,可以使用关键字“fname”在数据库表中执行搜索,但是我得到了一个错误 致命错误:对非对象调用成员函数prepare <?php require 'config.php'; try { $db = new PDO($dsn, $username, $password); $db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

我有一个pdo代码,可以使用关键字“fname”在数据库表中执行搜索,但是我得到了一个错误

致命错误:对非对象调用成员函数prepare

<?php
    require 'config.php';

    try {
        $db = new PDO($dsn, $username, $password);

        $db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

        $fname = $_POST['fname'];    

        $sth = "SELECT * FROM features_for_office WHERE fname LIKE :fname ";

        $stmt = $dsn->prepare($sth);
        $stmt->bindValue(':name', '%' . $fname . '%', PDO::PARAM_INT);
        $stmt->execute();

        $locations = $sth->fetchAll();
        echo json_encode( $locations );

    } catch (Exception $e) {
        echo $e->getMessage();
    }
?>
如果有人能帮助我,我将不胜感激。

您正在使用$db进行连接,并使用$dsn而不是$db

和你用fetchall做的一样。您使用$stmt执行,但使用$sth获取结果

$stmt = $dsn->prepare($sth);
$stmt->bindValue(':name', '%' . $fname . '%', PDO::PARAM_INT);
$locations = $sth->fetchAll();    


我已将连接命名为dsn,因此使用它来代替DBN,但这里您使用$db连接到dsn,请尝试更改它一次并检查输出现在我收到错误致命错误:在非对象上调用成员函数fetchAll现在更改$locations=$sth->fetchAll;到$locations=$stmt->fetchAll;获取错误SQLSTATE[HY093]:参数编号无效:未定义参数
$stmt = $db->prepare($sth);
$stmt->bindValue(':fname', '%' . $fname . '%', PDO::PARAM_INT);
$locations = $stmt->fetchAll(PDO::FETCH_ASSOC);