1

ユーザーテーブル(MySQL)があり、一意のIDはAIフィールド(user_id)です。データベースからユーザーの名前を取得する関数があり、それに渡されるパラメーターはuser_idだけです。user_id=8のユーザーの名前が「JonyBravo」であるとします。これが私の関数です:

function getName($user_id)
{
$sql="SELECT name FROM users WHERE user_id='$user_id'";
$result=mysql_query($sql) or die(mysql_error());
$row=mysql_fetch_assoc($result);
return ($row['name']);
}

以下の両方の関数呼び出しは同じ値を返します: "Jony Bravo"!

echo getName(8);
echo getName('8k');

kだけではなく、数字の後の文字は無視されているようです。親切に助けてください。

4

2 に答える 2

0

私が想像するIDは整数です。その場合、文字列「8k」がintに変換されると、すべての非数値チャーターは無視され、8が残ります。関数に「2k」を渡し、2番目のレコードを取得した場合、それは正しいことを意味します。ただし、これは悪い習慣です。整数のみを受け入れる必要がある関数に文字列を渡さないでください。

于 2012-12-18T09:37:04.763 に答える
0

これを試してみると:

SELECT 8='8k'

あなたはそれが真を返すのを見ることができます!これは、8がintであり8k、文字列であり、8kintに変換されると8になるためです。

代わりにfalseを返します。

SELECT CAST(8 as char)='8k'

したがって、次のようにクエリを作成する必要があります。

SELECT name FROM users WHERE CAST(user_id as char)='$user_id'

または、$ user_idが数値であることを確認し、以下を削除する必要があります'

SELECT name FROM users WHERE user_id=$user_id
于 2012-12-18T09:37:57.950 に答える