MYSQL-要插入到两个不同表中的语句

MYSQL-要插入到两个不同表中的语句,mysql,insert,Mysql,Insert,我有一个表单要提交到MYSQL数据库。 在我的数据库中,我有两个表,Subscribers和Category\u id。表格结构如下: 订户 subscriber_id INT NOT NULL AUTO_INCREMENT, name VARCHAR(30), email VARCHAR(30), phone INT,PRIMARY KEY (id)) 类别id category_id INT, subscriber_id INT 我想在订阅服务器中插入新行。我是用下面的语句完成的 $sq

我有一个表单要提交到MYSQL数据库。 在我的数据库中,我有两个表,
Subscribers
Category\u id
。表格结构如下:

订户

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

category_id INT,
subscriber_id INT
我想在订阅服务器中插入新行。我是用下面的语句完成的

$sql="INSERT INTO subscribers (name, email, phone)
VALUES
('$_POST[name]','$_POST[email]','$_POST[phone]')";
同时,我还想在Category\u id中插入一个新行,其中
Subscribers.subscriber\u id=Category\u id.subscriber\u id
//用于“same”记录


如何为此编写声明?

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

订户=>表格

SubscriberID PK Auto Increment
Name
Email
Phone
CategoryID FK references Category(CategoryID)
CategoryID PK Auto Increment
CategoryName
类别=>表格

SubscriberID PK Auto Increment
Name
Email
Phone
CategoryID FK references Category(CategoryID)
CategoryID PK Auto Increment
CategoryName
在这里,您可以填充多个类别,在每个类别中,您可以有多个订阅者。因此,当您想要插入新的订户时,您必须确定要将订户插入到哪个类别,然后相应地填写
订户
表格,使
类别
表格保持不变。通过这样做,您总是可以使用subscriber表上的
where
子句来获得每个类别的订阅者。从数据库设计的角度来看,这是正确的方法


p.S使用这种设计,您不必为每个订阅者插入两条记录。

我不确定您对Category\u id表做了什么。它看起来像是订阅者表和未提及表(可能是命名类别)之间的多对多表。这是正确的吗

无论如何,考虑到我认为你在问的问题,这里有一个解决方案:

# 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样式查询的任何内容:

我假设订户id是自动生成的?顺便说一句,一定要转义数据。看看这个:您的db设计不正确。您应该首先更正您的db设计。我尝试了您的代码,但它显示了一条错误消息“致命错误:调用bindValue出现的…行中未定义的方法PDO::bindValue()。缺少什么东西了吗?你需要安装它,尽管我相信它是默认的。在这里您可以找到一些相关信息:我还在示例代码的顶部添加了连接字符串。