【问题标题】:Why I have empty record in MySQL?为什么我在 MySQL 中有空记录?
【发布时间】:2014-04-28 18:04:43
【问题描述】:

在我们的系统中,他们要求我们添加研究兴趣,但是当我们添加新用户时,我们应该为他/她分配一个兴趣。它成功添加到数据库表中,我们遇到的问题是我们在 interest_id 数据库表中得到零记录,为什么?

这里所有的研究兴趣都成功添加到数据库中:

如下图所示,当管理员添加新用户时,他会选择多个兴趣并将它们分配给用户:

这是用户个人资料的屏幕截图,您可以看到管理员分配给新用户的兴趣:

问题是它没有将兴趣ID写入数据库?

下面可以看到代码和SQL表:

<p>
      <label>Research Areas</label>
      <select name="interest_id[]" class="small-input" multiple>
        <?php 
            $query = "SELECT * FROM research_interest ORDER BY name ASC";
            $result = mysqli_query($link, $query);
            while($row = mysqli_fetch_object($result))
            {
        ?>
            <option value="<?php echo $row->id; ?>"><?php echo $row->name; ?></option>
        <?php
            }
        ?>
      </select>
    </p>

这里还有 MySQL 的代码:

if(isset($_POST['action'])) {
    switch($_POST['action']) {

        case 'user_add':
            $user_id            = mysqli_real_escape_string($link,$_POST['user_id']);
            $email              = mysqli_real_escape_string($link,$_POST['email']);
            $password           = rand_pass(8);
            $title_id           = intval($_POST['title_id']);
            $user_type_id       = intval($_POST['usertype_id']);
            $department_id      = intval($_POST['department_id']);
            $view_publication   = mysqli_real_escape_string($link,$_POST['publication']);
            $referee            = mysqli_real_escape_string($link,$_POST['referee']);
            $gender             = mysqli_real_escape_string($link,$_POST['gender']);
            $creation_date      = date('Y.m.d');

            //Interest
            if(!empty($_POST['interest_id']) && is_array($_POST['interest_id'])) {
                foreach ($_POST['interest_id'] as $interest)
                    {
                        $query = "INSERT INTO user_interest (user_id, interest_id)
                        VALUES  ('$user_id', '$interest')";
                        $result = mysqli_query($link,$query);
                    }
            }

            //SQL Query
            $query = "INSERT INTO user (user_id, email, title, user_type_id, department_id, referee, gender, password, view_publication, creation_date)
                        VALUES  ('$user_id', '$email', '$title_id', '$user_type_id', '$department_id', '$referee', '$gender', '$password', '$view_publication', '$creation_date')";
            $result = mysqli_query($link,$query);

            echo '<script type="text/javascript">';
            echo 'window.location = "mail.php?action=user_mail&user_id='.$user_id.'"';
            echo '</script>';
        break;

    }
}

这是一个 user_interest 表,显示这三个研究 ID 分配给用户 1

但这里显示interest_id 为零,它不显示添加到用户1 的研究兴趣的ID

【问题讨论】:

  • 你画的最后一张桌子叫什么名字?
  • 您应该在插入研究兴趣后检查mysqli_error($link)。它会告诉你是否有问题。我的猜测是有一个外键约束,你需要在插入兴趣之前插入用户。
  • 您有两个表可以将用户与兴趣相关联?为什么?您的代码显然只更新了两个表,所以我不知道您为什么希望用这些数据更新第三个表。
  • 亲爱的@lagbox,表名是“user”
  • 亲爱的@MikeBrant 我有 3 个表,其中一个 user 表是最后一个,第二个是 research_interest 表,用于向系统添加新的研究兴趣,第三个表是 user_interest,它显示了哪些研究兴趣分配给用户!

标签: php mysql database insert


【解决方案1】:

您没有在对users 表的插入查询中包含interest_id。所以该表分配了一个默认值0

【讨论】:

  • 亲爱的@lagbox 我插入了你可以在评论行之后看到的//兴趣
  • 您可能正在运行查询。但是您的查询缺少interest_id 字段。你看不出来吗??
【解决方案2】:

您没有在第二个查询的“interest_id”列中插入任何内容,因此它默认为零。看起来您正在尝试建立多对多关系(一个用户可以有多个兴趣,一个兴趣可以属于多个用户)。在这种情况下,您需要设置一个联结表 (http://en.wikipedia.org/wiki/Junction_table) 来处理这种关系。

【讨论】:

    猜你喜欢
    • 2022-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-10
    • 2013-06-10
    相关资源
    最近更新 更多