1

PDO メソッドを使用してデータベースのクエリを開始したばかりで、ちょっとした障害にぶつかりました。

私がやろうとしているのは、単純なクエリの結果を先行入力フィールドに入力することです。

データベースを照会するコード:

$query = $db->prepare("SELECT `customers`.`Name` FROM `customers` WHERE       `customers`.`Name` LIKE :searchterm");

$searchterm = (isset($_POST['searchterm']) === true) ? $_POST['searchterm'] : '';

$query->bindValue(':searchterm', '%' . $searchterm . '%' );

$query->execute();

$rows=$query->fetchAll(PDO::FETCH_ASSOC);
echo(json_encode($rows));

先行入力を設定する Javascript:

            $('#customer-name').typeahead({
                source: function (query, process) {
                return $.post('ajax/get_customer_names.php', { searchterm: query }, function (data) {
                console.log(data);
                return process(data);
    });
}
});

これで、先行入力が次の形式の文字列の配列を期待していることがわかりました

{
"one": "Singular sensation",
"two": "Beady little eyes",
"three": "Little birds pitch by my doorstep"
}

問題は、現時点で私のコードが console.log に送信することにより、この形式で出力されることです

[{"Name":"test"},{"Name":"Southern Testing"}] 

私は一日中この問題に悩まされてきましたが、私が見つけた例はどれも適切ではありませんでした. $rows 変数を反復処理して文字列値を抽出する必要があると想定していますが、それを実現する方法がわかりません。誰かが私が間違っている場所を教えて、解決策を提供できますか?

4

1 に答える 1

0

最もエレガントなソリューションではないかもしれませんが、私は同じ問題に悩まされ、サーバー側で次のように解決しました。

$rows=$query->fetchAll(PDO::FETCH_ASSOC);
foreach ($rows as $r){
  $array[] = $k['Name'];
}
echo json_encode($array);

これにより、タイプアヘッドがそれを行うためにすべてがうまくフォーマットされます。

于 2013-03-17T21:46:16.490 に答える