微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PHP – 获取最后一个语句在第二个函数中使用的PK ID插入语句

参见英文答案 > Getting the return value from a function                                    2个
重复编辑:这个问题是不同的,因为我试图在同一个操作中返回一个特定的值,即在另一个函数INSERT语句中使用的主键ID作为外键. “重复”问题没有回答这个问题,而只是说明了如何从函数获取返回值.不是如何获取它并将其正确插入另一个函数prepare语句中.我不确定我做得对.

我有两个表,订单和客户要在同一个操作中从一个表单插入数据. orders表有一个主键= orderID,它也需要添加到customers表中.

数据库关系图

Relationship Diagram

我可以毫无问题地将数据上传到订单表,但对customers表的第二个查询功能什么都不做.我很确定这是由于我设置的外键约束.我做了一些研究,并意识到我需要获取外键id,可能使用$MysqLi-> insert_id或PDO :: lastInsertId,但我对如何将其与当前函数一起使用感到迷茫.

的index.PHP

$product = $_POST['product'];
$fName = $_POST['fName'];
$lName = $_POST['lName'];
$address = $_POST['address'];
$address2 = $_POST['address2'];
$city = $_POST['city'];
$state = $_POST['state'];
$zip = $_POST['zip'];
$country = $_POST['country'];
$phoneNumber = $_POST['phoneNumber'];
$email = $_POST['email'];
/* Functions */
order_Data ($db, $product, $fName, $lName, $email);
// Need to have orderID  from ^ table used in order_custData sql statement
order_custData($db, $orderID, $fName, $lName, $address, $address2, $city, $state, $zip, $country, $phoneNumber, $email);

的functions.PHP

<?PHP 

/**  Order Data Function
 */
function order_Data($db, $product, $fName, $lName, $email) {
    try {
        $sql = "INSERT INTO orders SET product = :product, fName = :fName, lName = :lName, email = :email";
        $ps = $db->prepare($sql);
        $ps->bindValue(':product', $product);
        $ps->bindValue(':fName', $fName);
        $ps->bindValue(':lName', $lName);
        $ps->bindValue(':email', $email);
        $ps->execute();
        return $orderID = $db->lastInsertId();
    } catch (PDOException $e) {
        die("Sorry, There was a problem order table.");
    }
}

/**  Customer Purchase information Function
 * @param $orderID -- I need to insert the orderID from orders table?
 */
function order_custData($db, $orderID, $fName, $lName, $address, $address2, $city, $state, $zip, $country, $phoneNumber, $email) {
    try {
        $sql = "INSERT INTO customers SET  orderID = :orderID, fName = :fName, lName = :lName, address = :address, address2 = :address2,city = :city, state = :state, zip = :zip, country = :country, phoneNumber = :phoneNumber, email = :email";
        $ps = $db->prepare($sql);
        $ps->bindValue(':orderID', $orderID); // Foreign key from orders table
        $ps->bindValue(':fName', $fName);
        $ps->bindValue(':lName', $lName);
        $ps->bindValue(':address', $address);
        $ps->bindValue(':address2', $address2);
        $ps->bindValue(':city', $city);
        $ps->bindValue(':state', $state);
        $ps->bindValue(':zip', $zip);
        $ps->bindValue(':country', $country);
        $ps->bindValue(':phoneNumber', $phoneNumber);
        $ps->bindValue(':email', $email);
        return $ps->execute();
    } catch (PDOException $e) {
        die("Sorry, There was a problem with the customer table!");
    }
}
?>

现在,order_custData函数中的$orderID和:orderID就像是一个可视化表示来解决问题.我最初并没有尝试用它来执行sql语句.但是,我尝试过的任何东西似乎都会抛出错误的定义变量或致命调用一个函数的prepare函数.

感谢您的时间.

解决方法:

效用函数order_Data()已经返回ID:

…
return $orderID = $db->lastInsertId();

(尽管重写返回$db-> lastInsertId();.

只需通过赋值变量来携带返回值:

$orderID = order_Data ($db, $product, $fName, $lName, $email);
order_custData($db, $orderID, $fN …);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐