php - phpmyadmin 中的外键在新闻源中给出错误

标签 php mysql sql database

我正在处理新闻源,我希望这是对的,但我希望上传的图片链接到上传它的用户。我有 2 个表。

users帐户存储在这里。

picas上传的图片存储在这里。

我有 users一个名为 user_id 的主键我在 picas表一个名为 id 的主键. 我在 picas一个名为 user_id 的新列上传图像时,我告诉 PHP 从登录用户那里获取 ID,然后将其插入到 user_id 中。表中的列 picas这样我就可以看到哪个用户上传了图片。

所以我的users表格如下所示:

+-------------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------+-------------+------+-----+---------+----------------+ | user_id | int(1) | NO | PRI | NONE | AUTO_INCREMENT | +-------------+-------------+------+-----+---------+----------------+

还有我的picas表格如下所示:

+-------------+-------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------+-------------+------+-----+---------+----------------+ | id | int(1) | NO | PRI | NONE | AUTO_INCREMENT | +-------------+-------------+------+-----+---------+----------------+ | user_id | int(1) | NO | | NONE | | +-------------+-------------+------+-----+---------+----------------+

目前我对新闻源有疑问。它显示不同用户的头像和姓名,但如果我在登录帐户时发布内容,它会为每个用户发布。所以如果我有 5 个不同的用户,我登录,上传图片,然后我立即看到 5 个帖子。在这里查看我的屏幕截图以获得更好的显示 --> http://i.imgur.com/VXwlbra.png

如果您单击图像,标题也一样。如果我放弃一个头衔,那么它也会显示在其他用户身上。 我上传时的代码:

uploadfile.php 这里我把上传的文件存入数据库。

<?php


if (isset($_POST['submit_pica'])) {

    $newName = md5(time().$_FILES['pica']['tmp_name']).'.jpeg';

    $postTitle = $_POST['postTitle'];

    $ses_user = $_SESSION['username'];

    $getuserid = mysqli_fetch_assoc($mysqli->query("SELECT id FROM users WHERE username='$ses_user'"));
    $userid = $getuserid['id'];

    $result = $mysqli->query("INSERT INTO picas (id, name, title, created_at, user_id)
                            VALUES (null, '$newName', '$postTitle', null, '$userid')");

    echo "<script>
            $('.upload_button').click(function() {
                $('#uploadform').slideUp(300);
            });
         </script>";

    move_uploaded_file($_FILES['pica']['tmp_name'], 'upload/'.$newName);

}

?>

showimages.php(这里我从数据库输出图片。

<?php
$result = $mysqli->query("SELECT *
                          FROM picas, users
                          ORDER BY created_at DESC");


$ses_user = $_SESSION['username'];

while($pica = $result->fetch_assoc()) {

    echo '<div class="image_post">
            <div class="user_avatar"><img src="avatars/'.$pica['username'].'.jpeg" /></div>
                <div class="user_name">'.$pica['username'].'</div> <br><br><br>
                <div class="image_title">'.$pica['title'].'</div>
                <img src="upload/'.$pica['name'].'" />
          </div>';

}

?>

我的 friend 说我必须创建一个外键 所以它在 user_id 之间创建了一个关系来自 picasuser_id来自 users .

显然它没有用。我从所有内容中获取了最新版本。

我只能选择:userspicas表(逻辑,因为我只有这些),然后在它旁边的选项字段中,我只能选择 iduser_id (取决于我选择哪个表)。

它给了我这个错误:http://i.imgur.com/2ukfKsH.png 在 imgur 链接中,您还可以看到我填写的内容。我转到表格:picas > structure > relation view

它不起作用。我希望使用外键是解决新闻源这个问题的方法,因为我希望在上传图像时,它会输出上传图像的用户,而不是输出上传图像的用户 + 存储的所有其他用户在数据库中。请帮我。我已经为此奋斗了一个星期。这让我发疯!

最佳答案

感谢您在写这个问题时的用心。

专业提示:避免在软件查询中使用 SELECT *。使用 SELECT * 可以让您在考虑结果集中想要的内容时马虎。

专业提示:如果您想要来自多个表的结果,请使用 JOIN 指令而不是逗号分隔的表列表。这使您能够清楚地思考表格之间的关系。

您正在使用此查询来显示您的项目。

SELECT *               /*wrong!*/
  FROM picas, users    /*combinatorial explosion!*/
 ORDER BY created_at DESC

此查询使用来自 picasusers 的所有可能的行组合来组装一个结果集。幸运的是,您在 picas 中还没有 50 个用户和 100 个条目,否则此查询将产生 5000 行。

你的查询需要的是这样的:

 SELECT users.user_id, users.username,
        picas.id, picas.name, picas.title, picas.created_at
   FROM users
   JOIN picas ON users.user_id = picas.userid
  WHERE users.username = '$ses_user'
  ORDER BY picas.created_at DESC

这将构建一个包含我提到的列的结果集。它将使用 ON 子句中的条件以有意义的方式连接两个表中的数据。

关于php - phpmyadmin 中的外键在新闻源中给出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24108848/

相关文章:

Mysql 排序 - 排序一些而不是其他?

MYSQL 创建新的存储过程

PHP - 我可以计算数据库中的行数并在超过 10 行时执行某些操作吗?

mysql:清除 10k wordpress 帖子中的垃圾,但保持相关性

php - 如何阻止我的 PHP 使用 PHP 通知向 error.log 发送垃圾邮件?

mysql - 将数据插入表并使用该数据创建 View

php - SQL WHERE 如果字段被序列化

sql - 子查询与内连接 - 哪一个执行得更快?

PHP 不会将表单中输入的数据发布到数据库?

php - Nginx:读取上游时 readv() 失败(104:对等连接重置)