【问题标题】:Assigning Foreign Key through PDO SQL通过 PDO SQL 分配外键
【发布时间】:2015-12-08 23:17:49
【问题描述】:

目前我要关注的表,是一个酒店预订网站;第一张桌子是客人,另一张是预订。这些表通过约束链接,主键是 guest 表上的 Guest ID,外键是 bookings 表上的 GuestIDFK2。

为了通过预订表识别客人,需要将 FOREIGN KEY 放在那里。问题是我不知道如何通过 PDO 分配外键,因为我不知道从哪里获取信息。 (我的意思是确定我可以为其分配一个值,但我从哪里获得信息)?如果可以,我可以将它存储在会话变量中吗?

我的连接和第一个查询代码如下。这会分配一个自动增量 ID,但我不知道在进行第二次查询时如何将其复制到 FK。

<?php
//Connecting to db adding customer
$conn = new PDO("mysql:host=localhost;dbname=sgh_bookings","root","");
if(isset($_POST['submit'])){
$resultquery1 = $conn->prepare("INSERT INTO `guests` VALUES ('','$_SESSION[cusfname]','$_SESSION[cusaddress]','')");
$resultquery1->execute();
$resultquery2 = $conn->prepare("INSERT into ``");
}
?>

【问题讨论】:

  • session_start() 并把它塞进$_SESSION['theGuest'] ...php.net/manual/en/session.examples.basic.php ...当你处理完那个客人后,确保你清除它($_SESSION['theGuest']
  • 但是如何在查询中输入 id 呢?
  • 如果您希望对 sql 注入攻击保持开放态度,那么只需按照您的方式转换来自 Internet 的旧 mysql_* 示例。在您的情况下,您根本不是 preparing 声明。您正在运行查询字符串。我建议您阅读 PDO 手册页

标签: php mysql sql pdo phpmyadmin


【解决方案1】:

将数据插入guests表后,将最后插入的id拍照并插入到booking表中 示例:

<?php
//Connecting to db adding customer
$conn = new PDO("mysql:host=localhost;dbname=sgh_bookings","root","");
if(isset($_POST['submit'])){
$resultquery1 = $conn->prepare("INSERT INTO `guests` VALUES ('','$_SESSION[cusfname]','$_SESSION[cusaddress]','')");
$resultquery1->execute();
$id = $conn->lastInsertId();
//insert the $id in following table
$resultquery2 = $conn->prepare("INSERT into ``");
}
?>

【讨论】:

  • 非常感谢先生!事后看来,简单直接。您的答案已被标记为正确!
【解决方案2】:

无耻地从手册页 here 挖走了。相应地调整。直接使用$theGuest 之类的变量或会话变量。使用bindParam,无论如何你都在PDO,利用它:>

如果您使用的是 PDO,请使用 PDO。

<?php
/* Execute a prepared statement by binding PHP variables */
$calories = 150;
$colour = 'red';
$sth = $dbh->prepare('SELECT name, colour, calories
    FROM fruit
    WHERE calories < :calories AND colour = :colour');
$sth->bindParam(':calories', $calories, PDO::PARAM_INT);
$sth->bindParam(':colour', $colour, PDO::PARAM_STR, 12);
$sth->execute();
?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-08
    • 1970-01-01
    • 1970-01-01
    • 2012-02-17
    • 2021-04-17
    • 1970-01-01
    相关资源
    最近更新 更多