为什么这会在我的表中插入一个字符串?

时间:2012-04-02 22:44:07

标签: php mysql

我有一个表contacts,其中包含字段arrayOfMembers(JSON格式)和一个表users,其字段为userId(int)。

$recipientId=getUserIdForEmail($recipientEmail);
addUserIdToContactsMemberIds($noteId, $recipientId);

function addUserIdToContactsMemberIds($noteId, $userId)
     {
          $memberData=mysql_query("SELECT * FROM contacts WHERE contactId='$contactId'");
          $memberResultData = mysql_fetch_assoc($memberData);
          $arrayOfMemberIds=json_decode($memberResultData['arrayOfMembers']);
          $arrayOfMemberIds[]=$userId;
          $sendback=json_encode($arrayOfMemberIds);
          mysql_query("UPDATE notes SET arrayOfMembers='$sendback' where contactId='$contactId'");
     }

function getUserIdForEmail($email)
    {
         $data=mysql_query("SELECT userId FROM users WHERE userEmail='$email'");
         $result = mysql_fetch_assoc($data);
         return $result["userId"];
    }

然而,$userId被存储为带引号的字符串,所以如果我原来有[1],在添加新的userId之后,它看起来像这[1,“2”]即使它应该看起来像[1,2]。

如果我在行中$arrayOfMemberIds[]=$userId;手动输入一个int值并放入$arrayOfMemberIds[]=5,那么我会得到正确的结果,即[1,5]。为什么会这样?

1 个答案:

答案 0 :(得分:4)

如果您的ID存在字符串问题(在大多数情况下,这不是什么大问题),那么只需使用intval()

$arrayOfMemberIds[] = intval($userId);

return intval($result["userId"]);

为什么是字符串?

无论数据库中的类型如何,

mysql_fetch_assoc都会将所有值作为string返回。直接来自PHP文档:

  

返回与获取的行对应的字符串 的关联数组,如果没有其他行,则返回FALSE。 - http://php.net/mysql_fetch_assoc