0

私のphpスクリプトは、クライアントのデータベースを検索することになっています。データベース内のクライアント名が数字で始まる場合を除いて、すべてがうまく機能します(列の形式はVarchar(255)です)。

if(isset($_GET['search'])) {
    $searchVal = "%" . $_GET['search'] . "%";
}

これが私がそれをつかむ方法です。サイトの反対側のオートコンプリート機能は問題なく機能し、データの送信に$ _POSTを使用しているため(サイトの訪問者がナビゲートできるように$ _GETを使用したかった)、言及する価値があると思います。 。

    $query = "SELECT DISTINCT clients.client_id,
                              clients.logoFileName,
                              clients.clientName,
                              clients.streetAddress,
                              clients.city,
                              clients.state,
                              clients.zip,
                              clients.latitude,
                              clients.longitude

                         FROM clients

                   INNER JOIN clientData

                           ON clients.client_id = clientData.client_id

                        WHERE clients.clientName LIKE ? AND clients.city LIKE ?

                           OR clientData.clientCategory LIKE ? AND clients.city LIKE ?

                           OR clientData.term LIKE ? AND clients.city LIKE ?";

    //setup
    $stmt->prepare($query);
    $stmt->bind_param('ssssss',$searchVal,$cityVal,$searchVal,$cityVal,$searchVal,$cityVal);

したがって、この検索は文字通り99%の検索で問題なく実行されます(約1000のクライアントがリストされており、これは数字で始まる10にのみ適用されます)。

したがって、「UPS Store 1840」を検索すると、「UPS」、「Store」、または「1840」を検索すると、それらが返されます。しかし、「14キャンドル」を検索すると、「14」も「キャンドル」も結果を返しません。

PHPMyAdminで同じ情報を検索すると、同じ結果が発生します(編集:まあ、完全なエラーではなく、「0行が返されました」と表示されます)。しかし、私が言ったように、$ _ POSTを使用したクエリは問題なく機能し、文字通り同じコードを使用します(同様の検索にアクセスしますが、取得するデータが少なく、制限があります)。

これは間違いなくMYSQLでエラーをポップしているので、送信される情報と関係があります。これは、$_POSTを介した送信が$_GETとは異なるフォーマットであると私に思わせます。

何が間違っているのですか、どうすれば修正できますか?

4

1 に答える 1

0

さて、これに出くわした人のために、私はエラーを見つけたと思います。どういうわけか、INNERJOINをすることはそれを台無しにしていました。LEFT JOINとbamに切り替えて、チャームのように機能しました。アクセスするデータをさらに追加しました。これは、INNERを使用して4つのテーブルから取得し、次にLEFT LEFTを使用しているため、多数のテーブルにわたるINNERJOINと関係があります。SELECT DISTINCTを維持する必要があります。そうしないと、10億件の結果が得られます(これを使用して、ウェイト検索に「関連性」オプションを追加しようとしました)。

また、照合がlatin1_swedish_ciなどと関係があるという理論があるので、すべてのテーブルをutf8_unicode_ciに変更しました。したがって、これら2つのことの1つ...

于 2013-03-10T21:34:55.460 に答える