php - 插入命令失败

标签 php mysql join

<分区>

因此,我无法将数据导入此表。我有一个类似的成员(member)表设置。如果我将插入查询更改为成员资格,则一切正常,但一旦我更改表以加入它,它就会停止工作。该表似乎设置正确,因为它与我的成员(member)表基本相同,但由于某种原因数据不会插入。我想不出是什么导致了我的问题,所以我去找专家。

请注意,当进入不同的表时,这段代码都可以完美地工作。提前致谢。

if ( isset($_POST['btn-join']) ) {

    // clean user inputs to prevent sql injections
    $groupID = trim($_POST['groupID']);
    $groupID = strip_tags($groupID);
    $groupID = htmlspecialchars($groupID);      

    $teamname = trim($_POST['teamname']);
    $teamname = strip_tags($teamname);
    $teamname = htmlspecialchars($teamname);

    // Query groups to set group name
    $query2 = "SELECT groupName FROM groups WHERE groupID='$groupID'";
    $result2 = mysqli_query($con,$query2);
    $groupquery = mysqli_fetch_array($result2,MYSQLI_ASSOC);
    $groupname = $groupquery['groupName'];

    // groupID validation
    if (empty($groupID)) {
        $error = true;
        $groupIDError = "Please enter valid Group ID.";
    } else {
        // check email exist or not
        $query3 = "SELECT groupID FROM groups WHERE groupID='$groupID'";
        $result3 = mysqli_query($con,$query3);
        $count = mysqli_num_rows($result3);
        if($count!=1){
            $error = true;
            $groupIDError = "Provided Group does not exist.";
        }
    }

    // basic teamname validation
    if (empty($teamname)) {
        $error = true;
        $nameError = "Please enter your Team Name.";
    } else if (strlen($teamname) < 3) {
        $error = true;
        $nameError = "Team Name must have at least 3 characters.";
    }

    // if there's no error, continue to signup
    if( !$error ) {

        $query = "INSERT INTO join(groupID,userID,groupName,teamName) VALUES('$groupID','$userID','$groupname','$teamname')";
        $membership = mysqli_query($con,$query);

        if ($membership) {
            $errTyp = "success";
            $errMSG = "Account successfully updated";
            header("Location: dashboard.php");

        } else {
            $errTyp = "danger";
            $errMSG = "Something went wrong, try again later...";   
        }   
    }
}

SQL:

CREATE TABLE IF NOT EXISTS `join` (
  `jID` int(11) NOT NULL AUTO_INCREMENT,
  `groupID` varchar(32) NOT NULL,
  `userID` varchar(32) NOT NULL,
  `groupName` varchar(35) NOT NULL,
  `teamName` varchar(32) NOT NULL,
  `joinDate` datetime DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`jID`),
  UNIQUE KEY `groupID` (`groupID`,`userID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

最佳答案

join 是 SQL 中的保留字。为避免此类问题,请在表名和列名周围使用反引号:

$query = "INSERT INTO `join`(`groupID`,`userID`,`groupName`,`teamName`) VALUES('$groupID','$userID','$groupname','$teamname')";
$membership = mysqli_query($con,$query);

作为旁注,您应该真正重写此查询以使用准备好的语句,然后将变量绑定(bind)到它。这是等待发生的 SQL 注入(inject)。

关于php - 插入命令失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43825200/

相关文章:

php - Laravel - 如何传递变量来重置密码模板?

php - 将自定义数据库与 Wordpress 集成

MySQL查询多个表的数据到列

php - 无法生成随机 CSRF token ! (phpmyadmin 4.6.4)

php - Laravel 捕获 TokenMismatchException

Java 和 MySQL,SELECT 有效;插入不

php - 使用 PHP 和 MySQL 处理 txt 文件中的非逗号分隔数据

php - 在 mysql 查询中运行 mysql 查询

sql - SQLite 自连接 ID 中的错误?

sql - GROUP BY SQL Server 后的总和百分比