当前位置: 首页 > 知识库问答 >
问题:

MySQLi插入,成功连接数据库但未成功插入[重复]

谭梓
2023-03-14

我正在尝试使用mysqli函数将一些数据插入到表中。

我的连接使用以下功能可以正常工作:

function connectDB(){
    // configuration
    $dbuser     = "root";
    $dbpass     = "";

    // Create connection
    $con=mysqli_connect("localhost",$dbuser,$dbpass,"my_db");

    // Check connection
    if (mysqli_connect_errno()) {
      echo "Failed to connect to MySQL: " . mysqli_connect_error();
        return false;
    }else{
        echo '<br />successfully connected<br />';
        return $con;
    }
}

但当我尝试运行insert函数时,数据库中什么也得不到。

function newUserInsertDB($name,$email,$password){
    $con = connectDB();

    // Prepare password
    $password = hashEncrypt($password);
    echo $password . "<br />";

    // Perform queries 
    mysqli_query($con,"SELECT * FROM users");
    mysqli_query($con,"INSERT INTO users (name,email,password,isActivated) VALUES ($name,$email,$password,0)");

    // insert
    mysqli_close($con); 
}

我一直在查看mysqli函数列表,寻找正确的错误方法,但它们似乎都与DB的连接有关,而不是与插入成功有关(而且我可以在我的DB中清楚地看到它没有插入。)

最好的调试方法是什么?我应该对插入使用哪种错误处理?

我尝试使用mysqli_sqlstate,它给出了42000的响应,但在我的语句中看不到任何语法错误。

共有1个答案

西门鹏程
2023-03-14

正如我在评论中提到的,您最好使用事先准备好的语句。例如...

$stmt = $con->prepare(
    'INSERT INTO users (name, email, password, isActivated) VALUES (?, ?, ?, 0)');
$stmt->bind_param('sss', $name, $email, $password);
$stmt->execute();

使用这一点,您不必担心转义值或为字符串类型提供引号。

总而言之,与尝试将值插值到SQL字符串中相比,准备好的语句要容易得多,也安全得多。

我还建议您将$con变量传递到函数中,而不是在函数中创建它。例如...

function newUserInsertDB(mysqli $con, $name, $email, $password) {
    // Prepare password
    $password = hashEncrypt($password);

    // functions that "echo" can cause unwanted side effects
    //echo $password . "<br />";

    // Perform queries 
    $stmt = $con->prepare(
        'INSERT INTO users (name, email, password, isActivated) VALUES (?, ?, ?, 0)');
    $stmt->bind_param('sss', $name, $email, $password);
    return $stmt->execute(); // returns TRUE or FALSE based on the success of the query
}
 类似资料:
  • 问题内容: 我使用以下jQuery通过数据服务插入数据。事件虽然我得到了状态响应201,并且数据已成功插入到我的数据库中,但系统仍然将其视为错误并给我“失败”警报? 我在这里想念什么? 更新: 来自Fire Bug的调试消息: 问题答案: 您必须发送{dataType:’text’}才能使成功函数与jQuery和空响应一起使用。

  • 问题内容: 我正在将数据插入MySQL数据库,以防万一如果插入失败,我需要给出一条适当的错误消息来指示。根据下面的代码,如果插入成功或失败,我将收到消息。 我要做的是仅在数据插入成功时才回显消息,如果失败则返回。我该如何修改我的代码? 问题答案:

  • 问题内容: 我一直在看这段代码已有一段时间了,但我看不出问题出在哪里。我已经阅读了整个StackOverflow,但仍然看不到我的错误在哪里。 错误在第13行中,即thats 。我尝试通过http://www.w3schools.com/php/php_mysql_insert.asp帮助自己,但对我没有太大帮助。 问题答案: 警告: 切勿将 w3schools 用于学习目的。他们的教程中有很多错

  • 我正在为我的网站做一个注册页面。我在PHPMyAdmin中维护一个包含7个字段的数据库(id、用户名、密码、电子邮件、活动、代码和日期)。我正在使用代码和活动字段来实现电子邮件激活。注册表单使用post方法获取4个参数(名称、电子邮件、密码和重新键入密码),并将提交按钮的信息传递给PHP代码,以检查用户是否是新的,电子邮件ID是否应该是新的,并在单击提交按钮后检查空字段。PHP代码如下所示: 当我

  • 问题内容: 在Ci中,我具有以下功能。如何测试查询是否成功插入而没有错误? 问题答案: 您可以使用codeigniter的功能。 在这里查看更多信息 您可以执行以下操作:

  • 我创建了一个表单,将数据插入在localhost的mysql(phpmyadmin)中创建的表中。当我填写表单并单击save按钮时,数据没有插入到表中。但是,行ID增加了。它也没有显示任何错误消息。根据编码,显示消息数据插入也成功。 使用phpMyAdmin 4.8。4,MySql,PHP版本5.6。40.我试过使用localhost。 数据库名称:采购测试;表名称:预算类型;列名称:ID,预算描