【问题标题】:Left join and last inserted ID dilemma左连接和最后插入的 ID 困境
【发布时间】:2014-12-19 13:59:35
【问题描述】:

你好,想用php构建一个注册和彩票应用程序 我想在用户注册时在我的奖品表中创建一个用户 ID,并且我想在用户买票时添加到我的 buy_count...

所以我有 2 张桌子:

prize , users

prize : users_id , buy_count
users : fn , ln , pass...usual staff

这是用户注册表格的脚本:

$sql = 'INSERT INTO users (id,fn,ls,psw) VALUES (:id,:fn,:ln,:psw);
INSERT INTO prize (user_id, buy_count) VALUES (LAST_INSERT_ID(), 4)';

脚本给我一个错误,它有什么问题?我想在用户注册时在奖品表中添加用户 ID,我的查询有什么问题? 这样做的正确方法是什么?


更新:

所以现在这是我的代码:

<?php



try {
    require_once 'inc/connect.php';

    $sql =("
INSERT INTO users (fn,ls,psw) VALUES (:fn,:ln,:psw);
INSERT INTO prize (user_id) VALUES (LAST_INSERT_ID());
    ");



$form = $_POST;
$fn = $form['fn'];
$ln = $form['ln'];
$psw = $form['psw'];

    $values = array(
':fn' => $fn ,
':ln' => $ln ,
':psw' => $psw

    );

    $stmt = $db->prepare($sql);
    $stmt->execute($values);



    if ( $stmt ){
        echo "<p>Thank you. You have been registered</p>";
    } else {
        echo "<p>Sorry, there has been a problem inserting your details. Please contact admin.</p>";
    }

    $errorInfo = $db->errorInfo();
    if (isset($errorInfo[2])){
        $error = $errorInfo[2];
    }



} catch (Exception $e) {
    $error = $e->getMessage();
}
?>




<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Database Connection with PDO</title>
    <link href="../../styles/styles.css" rel="stylesheet" type="text/css">
</head>
<body>
<h1>Connecting with PDO</h1>
<?php if(isset($error)) {
    echo "<p>$error</p>";
}else {

    ?>
<?php
if ( empty( $_POST ) ) {
    ?>



    <h1>Registration</h1>
    <form name="" action="" method="POST">
        <label for 'username'>Username: </label>
        <input type="text" name="fn"/>
        <label for 'password'>Password: </label>
        <input type="password" name="psw"/>
        <label for 'first_name'>First name: </label>
        <input type="text" name="fn"/>

        <br/>
        <button type="submit">Submit</button>
    </form>


<?php
} else {
    print_r( $_POST );
}
    ?>



<?php } //error  ?>

</body>
</html>

仍然没有做我想做的事......没有将任何数据添加到表和 AI users_id 最后我 有人可以帮忙吗?

【问题讨论】:

  • 它们是两个独立的语句。也许你应该单独执行它们。
  • 尝试运行两个查询但使用不同的变量?因此,将查询 :) 从二合一 var 拆分为每个 var 一个,并一次执行一个
  • 请提供错误。
  • LAST_INSERT_ID() MySQL 的可能重复项
  • 伙计们:我知道它们是 2 个单独的查询,我只是复制了它,我想知道如何执行这两个查询并使其与一个提交一起工作 + 我想知道这是我的查询做得对吗?

标签: php mysql pdo mysqli


【解决方案1】:

简答:RTM

长答案(来自 mysql 文档)当新的 AUTO_INCREMENT 值已经生成时,您也可以通过执行 SELECT LAST_INSERT_ID() 语句来获取它

您不会自动生成新 ID,而是直接指定值。所以你可以做两件事之一,从你的第一个查询中删除 id 列和值 :id 占位符,或者在你的第二个查询中使用相同的 :id 占位符。

【讨论】:

  • 所以我做到了:$sql ='INSERT INTO users (fn,ls,psw) VALUES (:fn,:ln,:psw)'; $sqlp ='插入奖品(user_id)值(LAST_INSERT_ID())'; ,我仍然不知道如何通过单次提交来执行两个查询
  • 哦,我知道了 mysqli multi_query($query) 会做到的
  • 你用的是mysqli还是pdo?如果你使用 mysqli,你可以使用 $mysqli->multi_query 方法。
  • 为什么要在一个 PDO 执行中执行两个查询?如果您想使用 PDO,您需要根据来自 GolezTrol 和 Michael Berkowski 的 cmets 将您的查询分开。否则使用 mysqli 多查询。
  • 请发布您的错误,以便我们确定问题出在哪里。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-07
  • 1970-01-01
  • 2013-11-13
  • 1970-01-01
  • 2017-05-20
  • 2014-03-29
  • 1970-01-01
相关资源
最近更新 更多