以Numeral开头,然后是字符的MySQL字段值被视为Numeric

时间:2012-12-18 09:27:43

标签: mysql alphanumeric

我有一个用户表(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,数字后面的任何字符似乎都被忽略了。请帮助。

2 个答案:

答案 0 :(得分:0)

我想象的ID是整数。如果是这样的话,当字符串'8k'被转换为int时,所有非数字包机都会被忽略,你留下8.将'2k'传递给函数,如果你得到第二条记录意味着我是正确的。但这是不好的做法,你不应该将字符串传递给必须只接受整数的函数。

答案 1 :(得分:0)

如果您尝试这样做:

SELECT 8='8k'

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