MYSQL - 要插入2个不同表的语句

时间:2013-12-09 10:40:59

标签: mysql insert

我有一个提交到MYSQL数据库的表单。 在我的数据库中,我有2个表,SubscribersCategory_id。表格结构如下:

订户

subscriber_id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(30),
email VARCHAR(30),
phone INT,PRIMARY KEY (id))

CATEGORY_ID

category_id INT,
subscriber_id INT

我想在Subscribers中插入一个新行。我是用下面的声明完成的。

$sql="INSERT INTO subscribers (name, email, phone)
VALUES
('$_POST[name]','$_POST[email]','$_POST[phone]')";

与此同时,我还想在Category_id中插入一个新行,其中Subscribers.subscriber_id = Category_id.subscriber_id //对于“相同”记录

如何为此编写声明?

2 个答案:

答案 0 :(得分:0)

您的数据库设计不正确您需要做的就是拥有两个表SubscriberCategory,如下所示:

订阅者=>表

SubscriberID PK Auto Increment
Name
Email
Phone
CategoryID FK references Category(CategoryID)

<强>类别=&GT;表

CategoryID PK Auto Increment
CategoryName

此处您可以填充多个类别,并且在每个类别中您可以拥有多个订阅者。因此,当您想要插入新订阅者时,您必须确定要插入订阅者的类别,然后填写subscriber表,保持category表不变。通过这样做,您可以始终使用订户表上的where子句获取每个类别的订户。从数据库设计角度来看,这是正确的方法。

使用此设计的P.S您不必为每个订户插入两条记录。

答案 1 :(得分:0)

我不确定你在使用Category_id表做什么。它看起来像Subscribers表和未提及的表之间的多对多表,可能名为Categories。这是对的吗?

无论如何,根据我的想法,这是一个解决方案:

# set up your connection (often set up globally, just like the old style):
$dbh = new PDO('mysql:host=localhost;dbname=my_db_name', $user, $pass);

$dbh->beginTransaction();

$query = "INSERT INTO subscribers (name, email, phone)
          VALUES (:NAME, :EMAIL, :PHONE);";

$dbh->prepare($query);
$dbh->bindValue('NAME', $_POST['name']);
$dbh->bindvalue('EMAIL', $_POST['email']);
$dbh->bindValue('PHONE', $_POST['phone']);
$dbh->execute();

$subscriber_id = $dbh->lastInsertId();

$query = "INSERT INTO category_id (subscriber_id, category_id)
          VALUES (:SUBSCRIBER_ID, :CATEGORY_ID)

$dbh->prepare($query);
$dbh->bindValue('SUBSCRIBER_ID', $subscriber_id);
$dbh->bindValue('CATEGORY_ID', $value_from_elsewhere); // Determined earlier.
$dbh->execute();

$dbh->commit();

我将您的查询转换为PDO样式的查询。将POST中的变量直接放入SQL查询字符串可能会让您对SQL注入攻击持开放态度。

查看此页面,或者有关如何在PHP中使用PDO样式查询的任何内容: http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/