1

この問題についてスタックを検索しましたが、何も見つかりませんでした。おそらく構文の問題ですが、わかりません。

//Include necessary files
include_once("inc/mysql.inc.php");
include_once("inc/security.inc.php");

//SECURITY: Check input before adding them into the table.
$u = security_checkinput($u);

//Connect to the MySQL database.
mysql_dbconnection();
//Go get users id corresponding to the search
$u = mysql_query("SELECT id FROM users
            WHERE name LIKE \"%$u%\" OR active LIKE \"%$u%\" 
            ORDER BY name ASC") or die("There is a server error : " . mysql_error());
$u = mysql_fetch_row($u);
//Close database connection
mysql_dbclose();

//Return the array.
return $u;

クエリの後に $u で mysql_num_rows を試したところ、0 が返されました。残念ながら、users テーブルと name 列に何かがあります。

何か助けはありますか?どうもありがとう !!

編集: 問題は security_check 関数によるものです。可能な限りSQLインジェクションを避けたいので、これを作りました:

    function security_checkinput ($s)
{
    $s = stripslashes($s);
    if (!is_numeric($s))
        $s = "'".addslashes($s)."'";
    return $s;  
}
4

5 に答える 5

2

ポイント1:クエリを$ uに割り当て、LIKEステートメントで同じ変数を使用しています。

ポイント2:LIKEステートメントを正しく記述していませ ん。そのはず

$query = mysql_query("SELECT id FROM users
            WHERE name LIKE '%$u%' OR active LIKE '%$u%' 
            ORDER BY name ASC") or die("There is a server error : " . mysql_error());

また

$query = mysql_query("SELECT id FROM users
            WHERE CONCAT(name, ' ,' , active) LIKE '%$u%' 
            ORDER BY name ASC") or die("There is a server error : " . mysql_error());

変数が多い場合は、n個のORステートメントを記述する必要がないため、CONCATを使用することをお勧めします。

于 2012-06-22T17:45:19.923 に答える
0

これがあなたの問題の唯一の原因であるかどうかは完全にはわかりませんが、これは

WHERE name LIKE \"%$u%\" OR active LIKE \"%$u%\" 

する必要があります

WHERE name LIKE '%$u%' OR active LIKE '%$u%' 

このクエリをデータベースに対して直接実行してみましたか?そこに何が戻ってきますか?

于 2012-06-22T17:43:49.037 に答える
0

$ uとは何ですか?クエリは正常です。一致する行がないようです。

デモを見る

于 2012-06-22T17:44:09.013 に答える
0

最初にクエリをエコーし​​て、データベースで直接実行しようとしましたか?

とにかく、LIKE句を正しく使用してください。

$u = mysql_query("SELECT id FROM users
            WHERE name LIKE '%$u%' OR active LIKE '%$u%' 
            ORDER BY name ASC") or die("There is a server error : " . mysql_error());

ここで「/」を使用する必要はありません。phpvariableはここで処理されます。これを試して

于 2012-06-22T17:41:03.357 に答える
0

セキュリティ機能に問題があるようです。たとえば、$u が単語 test である場合は常に、SQL ステートメントに既に含まれている 'test' が返されます。

セキュリティ機能からそれを削除すれば、問題ありません。ただし、スラッシュを削除して、mysql_real_escape_string などの適切なものにスラッシュを追加することをお勧めします。

古いコードに基づく修正の例:

function security_checkinput ($s)
{
    $s = stripslashes($s);
    if (!is_numeric($s))
        $s = addslashes($s);
    return $s;  
}

mysql_real_escape_string の使用例(代わりにこれを実際に使用する必要があります) :

function security_checkinput ($s){
$s = mysql_real_escape_string($s);
return $s;  
}

Nishu Tayal のソリューションも必ず適用してください。スラッシュはそこに属していません。

于 2012-06-22T18:59:40.370 に答える