0

ここにコードのこの部分があります(もちろん、コンストラクターなどと作成されたオブジェクトがあります)

function searchUsers($term)
{
    $searchUserSQL = "SELECT userID, givenName, familyName from userbase where givenName or familyName = :name";
    $searchUserPrepare = $this->prepare($searchUserSQL);
    $searchUserPrepare->bindParam(':name', $term);
    $searchUserPrepare->setFetchMode(PDO::FETCH_ASSOC);
    $searchUserPrepare->execute();
    $searchUserResult = $searchUserPrepare->fetchAll();
    foreach($searchUserResult as $row){
            $row['userBaseData']=$this['givenName'];
            $results[] = $row;
        }
        return $results;
}

ただし、結果は常に NULL です。PHPmyAdmin でこの qry をテストすると、結果も得られません。

しかし、テーブル userbase には、userID、givenName、および familyName という名前の列名があり、検索用語も正しいです。私のqryで何が間違っているのかわかりません。何か助けはありますか?

4

3 に答える 3

2

SELECT userID, givenName, familyName from userbase where givenName or familyName = :name

特にWHERE句で、そのクエリがどのように機能するかさえわかりません。

SELECT
    u.userID
  , u.givenName
  , u.familyName
FROM `userbase` u
WHERE u.givenName = :given_name
  OR u.familyName = :family_name;

$term次に、両方にバインドし:given_name:family_name


EDIT全体をまとめて(書き直しました)

function searchUsers( $term )
{
    $sql = <<<SQL
SELECT
    u.userID
  , u.givenName
  , u.givenName AS `userBaseData`
  , u.familyName
FROM `userbase` u
WHERE u.givenName = :given_name
  OR u.familyName = :family_name;
SQL;

    $stmt = $this->prepare( $sql );
    $stmt->bindParam( ":given_name", $term, PDO::PARAM_STR );
    $stmt->bindParam( ":family_name", $term, PDO::PARAM_STR );
    $stmt->execute();

    return ( $stmt->rowCount() > 0 )
        ? $stmt->fetchAll( PDO::FETCH_ASSOC )
        : array();

}

編集2

あなたが何を達成しようとしているのかわからない$row['userBaseData'] = $this['givenName']

于 2013-03-25T15:55:13.683 に答える
0
    $results = array();    
    foreach($searchUserResult as $row){
        $row['userBaseData'] = ??????;
        $results[] = $row;
    }
    return $results;

??????を置き換えます 正しい変数で。現在の変数名が間違っています!

これで、少なくとも空の配列が返されます..

于 2013-03-25T15:53:41.693 に答える
0

PDO を使用していると仮定すると、最初にデータベースに接続する必要があります。

$conector = new connection("server","database"); // Your custom class to connect to a DB
$con = $conector->connect(); // Return the connector
$con->exec('SET CHARACTER SET utf8'); // A must have
$con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // A must have to handle exceptions and know better the errors that it gives, use try - catch
$consulta = $con->prepare("SELECT userID, givenName, familyName from userbase where givenName or familyName = :name;");
$consulta->bindParam(':name', $name, PDO::PARAM_STR);
$data = array('name' => $term);
$consulta->execute($data);
foreach($consulta as $row){
        $row['userBaseData']=$this['givenName'];
        $results[] = $row;
}
return $results;

そのコードを試してください。

于 2013-03-25T16:05:05.517 に答える