【问题标题】:MySQL Insert Into New Columns Each TimeMySQL每次插入新列
【发布时间】:2011-03-11 17:34:57
【问题描述】:

我有以下代码:

<?php
$con = mysql_connect("localhost","will","blahblahblah");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("bombom", $con);

$sql="INSERT INTO links (link, notes)
VALUES
('$_POST[link]','$_POST[notes]')";

if (!mysql_query($sql,$con))
  {
  die('Error: ' . mysql_error());
  }
echo "1 record added";

mysql_close($con)
?>

这会在我的数据库中的表中添加一条新记录。我将使用这个数据库处理多个用户,每个用户应该有自己的表还是只有自己的记录?

我只考虑他们自己的记录,但我将如何对其进行编码,以便它为每个人从表单提交的链接和注释创建两个新列并添加到他们的记录中?

【问题讨论】:

  • 确保您阅读了有关 SQL 注入的信息。您发布的代码是致命的。

标签: php mysql database insert


【解决方案1】:

您对数据库表的运行方式存在根本性的误解。您不会为每个用户创建列或表。您为所有用户创建一个表,并有一种方法来唯一标识该行属于哪个用户。

table users:
    id int
    name varchar(32)
    password varchar(3)

table links:
    user_id int // foreign key pointing to users.id
    link text,
    notes text

然后,要查找任何一个用户的链接,您应该这样做

SELECT link, notes FROM links WHERE useri_id=XXX;

【讨论】:

  • 马克在这里。然而,还有一些其他的事情需要注意。您的示例代码很容易被黑客入侵。阅读 SQL 注入并使用准备好的语句。接下来,PHP 中的 mysql_ 函数是旧的。使用mysqli_ 系列函数或PDO。人们会争论哪个更好——没有人会争论你应该使用mysql_
【解决方案2】:

你会给你的用户表一个 ID,比如user_id,然后你会给你的链接表一个 ID,比如link_id。然后,您将创建一个联合表,其结构为:union_id,user_id,link_id。然后在创建链接时,创建条目,保留 mysql_insert_id(),获取当前用户 id,并创建联合。然后,您可以获取用户 ID 并通过联合表查找他们的所有笔记。绝对不要为每个用户制作一张桌子!

【讨论】:

    猜你喜欢
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2016-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-21
    相关资源
    最近更新 更多