0

PHPで簡単な検索関数を作成しようとしていますが、ユーザーは検索クエリをテキストボックスに挿入します。

<form action="inc/search.inc.php" method="post">
            <input id="searchbox" name="search" class="search" type="text"></input>
            </form>

私のsearch.inc.pageは、次のクエリを使用してユーザーをURLにリダイレクトします。

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST"
        && !empty($_POST["search"]))
{
        $searchquery=$_POST["search"];
        header("Location: ../search.php?qr=".$searchquery);
}
?>

私のsearch.phpは関数retrieveSearchを呼び出します:

<?php 
include_once 'inc/functions.inc.php';
include_once 'inc/db.inc.php';

$db2 = new PDO(DB_INFO, DB_USER, DB_PASS);
$qr = (isset($_GET["qr"])) ? (string) $_GET["qr"] : NULL;

$e2 = retrieveSearch($db2, $qr);

$qresult = array_pop($e2);

echo $qresult;
 foreach ($e2 as $row)
 {
     echo $row["title"]."<br/>  ";
 }
?>

retrieveSearch関数:

function retrieveSearch($db2, $qr=NULL)
{
    $sql2 = "SELECT id, title, resume, search
            FROM blog
            WHERE search LIKE ?";
    $stmt2 = $db2->prepare($sql2);
    $stmt2->execute(array($_GET["qr"]));
    $e2 = $stmt2->fetch();

    array_push($e2, $qr);
    return $e2;
}

残念ながら、これにより奇妙な結果が返されます。たとえば、「fff」(「検索」エントリの1つ)を検索すると、次のようになります。

fff3
3
f
f
<
<
f
f

'fff'の前の3つはidです-それがどこから来たのかわかりませんが、他の文字はすべての列の最初の文字/記号のようです...特に「タイトル」だけが欲しいと言ったのに列が表示されます。

4

1 に答える 1

1

PDOStatement::fetchのドキュメントをご覧ください

何が起こるか:結果の最初の行のみをフェッチしてから、その列を反復処理します。次に、「title」文字列がint(ゼロとして評価)に変換され、結果が各列の最初の文字になります。

于 2012-09-15T13:13:38.410 に答える