1

我有一个用户表(MySQL),唯一的 id 是一个 AI 字段(user_id)。我有一个从数据库中获取用户名的函数,传递给它的唯一参数是 user_id。假设 user_id=8 的用户名是“Jony Bravo”。这是我的功能:

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' 传递给函数,如果你得到第二条记录,这意味着我是正确的。但这是一种不好的做法,您不应该将字符串传递给必须只接受整数的函数。

于 2012-12-18T09:37:04.763 回答
0

如果你试试这个:

SELECT 8='8k'

你可以看到它返回true!那是因为8是一个int,又8k是一个字符串,8k转换成int就变成了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 回答