MYSQL-要插入到两个不同表中的语句
我有一个表单要提交到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
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()。缺少什么东西了吗?你需要安装它,尽管我相信它是默认的。在这里您可以找到一些相关信息:我还在示例代码的顶部添加了连接字符串。