php - 为什么要在我的表中插入一个字符串?

标签 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]。

如果我在行中手动输入 int 值:$arrayOfMemberIds[]=$userId; 并输入 $arrayOfMemberIds[]=5,那么我会得到正确的结果结果,即[1,5]。为什么会发生这种情况?

最佳答案

如果您对 ID 为字符串有疑问(在大多数情况下,这没什么大不了的),那么只需使用 intval():

$arrayOfMemberIds[] = intval($userId);

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

为什么是字符串?

mysql_fetch_assoc 将所有值以字符串 形式返回,无论数据库中的类型如何。直接来自 PHP 文档:

Returns an associative array of strings that corresponds to the fetched row, or FALSE if there are no more rows. - http://php.net/mysql_fetch_assoc

关于php - 为什么要在我的表中插入一个字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9984856/

相关文章:

php - 将 javascript 变量传递给 php 代码?

javascript - Jquery .parent 在 DOM 中走得太远

php - 未定义的 lcfirst()

mysql - Perl:在 Perl-Hash 中存储来自 Mysql 表的列

mysql - 当我的 MySQL 字段也有小时/分钟/秒时,有什么方法可以使用 Django.models 按日期计算 "group by"吗?

java - netbeans 中的 Swing TableView

mysql - 如果 2 个或更多成员选择了同一个团队,则返回猜测最接近分数的成员

php - 我可以结合元数据还是必须只使用一个元数据?

php - 如何在 CouchBase 中增加或创建唯一 ID?

python - 在 django 中将字段更改为外键后出现未知列错误