2012-12-18 32 views
1

我有一个用户表(MySQL),唯一ID是一个AI字段(user_id)。我有一个函数来从数据库中获取用户名,唯一传递给它的参数是user_id。 可以说user_id = 8的用户名是“Jony Bravo”。 这里是我的功能:以数字开头,后跟字符的MySQL字段值被视为数字

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']); 
} 

两个函数调用下面返回相同的值:“强尼布拉沃”!

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

这不仅仅是k,数字后的任何字符似乎都被忽略。请帮助。

+0

确实,MySQL非常接近PHP的类型。 – deceze

+0

实际问题是什么? –

+0

你们这么快回复。我很感激。 @deceze,所以MySQL会将一个int开头的字符串转换为一个int? – gthuo

回答

0

如果你试试这个:

SELECT 8='8k' 

,你可以看到它返回true!这是因为8是一个int和8k是一个字符串,并8k转换成int变为8

这将返回错误,而不是:

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 
+0

谢谢@fthiella。这是一个新的。它的工作原理。 – gthuo

0

我想象的ID是整数。如果是这样,当字符串'8k'被转换为int时,所有非数字章程将被忽略,并且您将留下8个字符。将'2k'传递给该函数,并且如果获得第二条记录,则表示我是正确的。但是这是不好的做法,你不应该把字符串传递给只能接受整数的函数。

+0

我现在得到它@DimDqkov。我很感激。 – gthuo

相关问题