首页 > 解决方案 > 数据未插入数据库,但我收到消息新记录输入成功

问题描述

<?php

error_reporting(E_ALL);
$username = $_POST['username'];
$email_id = $_POST['email_id'];
$phone_no = $_POST['phone_no'];
$gender = $_POST['gender'];
$country = $_POST['country'];
$courses = $_POST['courses'];

//i am checking here values***
if (!empty($username) || !empty($email_id) || !empty($phone_no) || !empty($gender) || !empty($country) || !empty($courses)) {

//db connectiion***
    $host = "localhost";
    $dbUsername = "root";
    $dbPassword = "";
    $dbname = "registartionform";
    //create connection
    $conn = new mysqli($host, $dbUsername, $dbPassword, $dbname);
    if (mysqli_connect_error()) {
        die('Connect Error('. mysqli_connect_errno().')'. mysqli_connect_error());
    } else {
        //check email already exists or not and insert the value in db***
        $SELECT = "SELECT email_id From registration Where email_id = ? Limit 1";
        $INSERT = "INSERT Into registration (username, email_id, phone_no, gender, country, courses) values($username, $email_id, $phone_no, $gender, $country, $courses)";
        //Prepare statement

        $stmt = $conn->prepare($SELECT);
        if ($stmt !== false) {
            $stmt->bind_param("s", $email_id);
            $stmt->execute();
            $stmt->bind_result($email_id);
            $stmt->store_result();
            $rnum = $stmt->num_rows;
        }

        if ($rnum == 0) {
            $stmt->close();
            $stmt = $conn->prepare($INSERT);
            $stmt->bind_param("ss", $username, $email_id, $phone_no, $gender, $country, $courses);
            if ($stmt !== false) {
                $stmt->execute();

                echo "New record inserted sucessfully";
            } else {
                echo "Someone already register using this email";
            }
        }
        $stmt->close();
        $conn->close();
    }
} else {
    echo "All field are required";
    die();
}

标签: phpmysqli

解决方案


你不能这样做

INSERT Into registration (username, email_id, phone_no, gender, country, courses) 
values($username, $email_id, $phone_no, $gender, $country, $courses)

然后尝试绑定变量

$stmt->bind_param("ss", $username, $email_id, $phone_no, $gender, $country, $courses );

您应该在 SQL 查询中使用占位符。尝试:

INSERT Into registration (username, email_id, phone_no, gender, country, courses) 
values(?, ?, ?, ?, ?, ?)

值将在 bind_param 变量中提供。

此外,bind_param 中有 7 个变量,INSERT 语句中只有 6 列。您需要进行处理,否则 SQL 将不知道将数据放在哪里。


推荐阅读