0

私は学校で、MySQL と PHP で検索をプログラミングする方法を学びました。

私のsearch.phpには次のコードがあります。

<?php
mysql_connect("localhost", "root", "");
mysql_select_db("db1");

$sql = "SELECT * from tuser";
$Namen = mysql_query ($sql);
$user_id = $_GET['user_id'];
$search = $_GET['search'];

while ($ergebnis_datensatz = mysql_fetch_array($Names)){
    $user_id = $ergebnis_datensatz['user_id'];
    $name = $ergebnis_datensatz['name'];
    $surname = $ergebnis_datensatz['surname'];

    if ($name == "$search") {
        echo "$name $surname";
    }

    else {
        echo "";
    }


    if ($surname == "$search") {
        echo "$name $surname";
    }

    else {
        echo "";
    }

}


?>

私の検索入力サイトでは、「name = search」という単純な入力があります

今この検索を使用すると、大文字と小文字が区別されます。例: 「* k *elvin」で検索しても何も表示されません。しかし、「* K * elvin」を検索すると、結果が得られます。

大文字と小文字を区別しないようにするにはどうすればよいですか?

4

4 に答える 4

4

テーブルの照合を確認します。デフォルトでは (構成によって異なります)、MySQLは大文字と小文字を区別しないutf8_general_ciwhereを使用します。ci一方を使用するutf8_binと、大文字と小文字を区別する照合が行われ、すべての検索で大文字と小文字が区別されます。

その他の一般的な照合はlatin1_general_ci(and *_cs、 and latin1_bin) です。

于 2013-03-27T16:47:27.610 に答える
1

クエリを最適化し、関連するオプションのみを検索する必要があります。

ただし、両方のパラメーターを小文字にすると、大文字と小文字を区別せずに検索できます (たとえば)。そうすれば、コードは次のようになりますif (strtolower($name) == strtolower($search)) {if (strtolower($surname) == strtolower($search)) {

ただし、代わりにクエリを次のように制限します。 SELECT * from tuser WHERE name LIKE $search OR surname LIKE $searchこれにより、検索パラメーターに一致するすべての結果が得られます。

$search をエスケープすることを忘れないでください

于 2013-03-27T16:48:45.240 に答える
1

すでに述べたように、最も一般的な MySQL 照合は大文字と小文字を区別しません。ただし、照合順序を変更したくない場合は、BINARY 演算子を使用してこれを回避できます。

http://dev.mysql.com/doc/refman/5.0/en/charset-binary-op.html

すなわち

SELECT * 
FROM tuser 
WHERE BINARY $search IN (name,surname)

だから与える

$sql = 'SELECT * FROM tuser WHERE BINARY "'.$search.'" IN (name,surname)';

重要これには注意してください。現時点では、これにより SQL がインジェクションにさらされる可能性があります。これは、すべてを選択してから PHP でループするよりも効率的ですが、最初にコードを改善する必要があります。

SQL インジェクションに関する回答はこちらPHP で SQL インジェクションを防ぐにはどうすればよいですか?

于 2013-03-27T16:51:28.530 に答える
0

strcasecmp()関数を使用して、2 つの文字列を比較し、大文字と小文字の区別を無視できます。

if ($name == "$search") {

に:

if (strcasecmp($name, $search)) {
于 2013-03-27T16:50:48.283 に答える