1

私はMySQLとPHPを行うことを自分で学んでいます。それは私にとって新しい世界です、私は数冊の本を持っています、そして私はここに尋ねる前にグーグルでたくさんの研究をします。だから私は次の問題で立ち往生していて、答えを見つけることができません、私はMySQLデータベースを持っています、データベースにはURLと呼ばれる特定のフィールドがあります。

URLフィールドの一部は次のようになります。

&path=products&user=Mark24&id=2616

現在、人々がデータベース内のアイテムを検索できるように設定していますが、これはうまく機能します。検索機能に追加したいのは、ユーザーによる検索です。ご覧のとおり、ユーザーはURL全体の真ん中にいるので、次のようになります。

    $query = "select Productid, Productname, url,  from Products where Productid like '%$keyword%' or Productname like '%$keyword%' or url like '%$keyword%' ";
    $result = mysqli_query($dbc,$query);

今、本当の問題が来ます、^^これは不思議に働きます、人々は実際にユーザー名を検索することができ、それは私が望むものを正確に表示します。ただし、URLに含まれている「products」または「path」という単語を検索すると、データベース内のすべてのURLにproductsとpathという単語が含まれているため、2000件を超える一致が得られます。なぜ私はそれを避けたいのですか?顧客がデータベース全体を検索することを望まない。また、クエリごとに顧客が製品の画像、製品名、および製品へのリンクを取得するため、サーバーの過負荷も恐れています。2000を超える画像を読み込もうとすると、ブラウザの速度が低下したりクラッシュしたりするため、これを何らかの方法で修正する必要がありますが、どのように対処すればよいかわかりません。

では、URLフィールドにuser = "blah"と書かれている部分だけを一致させる方法はありますか?私はこれをPHPで行いますか、preg-matchおそらく???

提供された情報は大歓迎です!ありがとう。

4

3 に答える 3

2

さらに2列作ってみませんか?ユーザー名とIDを含むもの?そして、検索を行うときは、代わりにそれらを検索してください。

于 2012-06-16T21:59:02.817 に答える
1

ただ検索する

"%&path=products&user=%what you're searching for%"

そうすれば、path=productパラメーター以外に'product'を持つ行のみが返されます。または、mysql、postgresqlなどのデータベースでは正規表現も使用できますが、処理能力の点でコストが高くなります。

正規表現形式では、次のようになります。真ん中にphp変数があります:

"... WHERE url REGEXP  '&path=products&user=" . $user . "&id=[0-9]+$'"

このようなものを使用する場合は、入力した値をエスケープしてSQLインジェクションから保護する必要があります。データベースを活用したアプリケーションを作成するためのpdoを検討し始め、バインドされたパラメーターを使用してプリペアドステートメントを使用して自分自身を保護する必要があります。基本的には、正規表現を作成し、それをバインドするパラメーターとして渡すだけです。

于 2012-06-16T22:06:08.670 に答える
1

代わりにこれを試してください:

$query = "select Productid, Productname, url,  from Products where Productid like '%$keyword%' or Productname like '%$keyword%' or url like '%user=$keyword%' ";
于 2012-06-16T22:10:59.857 に答える