【问题标题】:PHP/SQL: How to insert form input via SQL into 2 database tables with PHP?PHP/SQL:如何使用 PHP 将表单输入通过 SQL 插入到 2 个数据库表中?
【发布时间】:2026-01-09 17:30:01
【问题描述】:

我刚开始使用 PHP 和 SQL,我正在尝试用 PHP 为网站制作帐户创建屏幕。为此,我创建了一个表单文件,其中包含对第二个文件的操作,表单中的输入数据应该插入到本地数据库的两个表中。 (我将 WAMP 与 phpMyAdmin 一起使用)-

我的(数据库)连接已启动,一切正常,我没有错误,当转到 phpMyAdmin 并使用虚拟数据执行 SQL 语句时它可以工作,但是当用户填写表格并单击下一步时它不会插入数据库?任何人都知道如何解决这个问题?

这是我当前的 php 代码,其中数据应该通过 SQL 语句插入到 2 个不同的表中:

<?php
    $_SESSION['user'] = $_POST['name']; //user naam ophalen van vorige pagina en onthouden voor gehele sessie
$name= $_SESSION['user'];

    $_SESSION['wachtwoord'] = $_POST['access']; 
$access= $_SESSION['wachtwoord'];

    $_SESSION['mail'] = $_POST['email'];
$email= $_SESSION['mail'];

    $_SESSION['huisdier'] = $_POST['pet'];
$pet= $_SESSION['huisdier'];

$savenewuser = "BEGIN; 
                INSERT INTO user (id, naam, email, pass)
                VALUES (NULL, '$name', '$email', '$access');
                INSERT INTO preferences (id, huisdier)
                VALUES (LAST_INSERT_ID(), '$pet');
                COMMIT;
                ROLLBACK;";

mysqli_query($con, $savenewuser);

$result = mysqli_query($con, $savenewuser);
if (!$result) {
echo "Error: Account could not be created, try again later.";
} else { 
echo "Account has been created!";
}

mysqli_close($con);
?> 

执行时,我确实收到消息“错误:无法创建帐户,请稍后再试。”当然。 - 我认为我必须更改有关 SQL 语句的某些内容,但我不确定具体如何。

【问题讨论】:

  • 你需要把session_start()放在代码的顶部。你没有分配给$name, $email, $access 在你打开&lt;?php 标记error_reporting(E_ALL); ini_set('display_errors', 1); 后立即添加错误报告到文件顶部。使用真正的MySQLi 错误消息。
  • @JayBlanchard 我已经做到了,这就是我文件最顶部的内容:
  • 尝试改变 $result = mysqli_query($con, $savenewuser);而不是 $result = mysqli_query($con, $savenewuser) 或 die (mysqli_error($con)) ;
  • @JayBlanchard 我刚刚添加了您的建议并添加了 Lord_Linus 的建议。我目前得到的错误是:mysql_error() 期望参数 1 是资源
  • @lord_linus 在您的建议中添加。我得到的当前单个错误是:mysql_error() 期望参数 1 是资源

标签: php sql mysqli


【解决方案1】:

mysqli_query 被调用了两次。如果您第二次调用它两次将出错,因为您试图为 2 个人提供相同的 id(假设您正确设置了数据库)。

如果这不起作用,我会尝试用 mysqli_multi_query 替换 mysqli_query。

【讨论】:

  • 谢谢!您的回答解决了我的问题,我不得不将其更改为 mysqli_multi_query。非常感谢!
最近更新 更多