【问题标题】:I cant seem to insert data in my database using php with mysql wamp我似乎无法使用 php 和 mysql wamp 在我的数据库中插入数据
【发布时间】:2018-01-16 22:50:07
【问题描述】:

这是一个注册示例代码,用户需要输入他/她的名字、姓氏、用户名、电子邮件、密码并重新输入他/她的密码。出于某种原因,我无法将任何数据插入到我的数据库中。

<?php
session_start();
$db = mysql_connect("localhost", "janrex", "webdev", "cuisine");

if(isset($_POST['SI']))
{
    $firstname = mysql_real_escape_string($_POST['f_name']);
    $lastname = mysql_real_escape_string($_POST['l_name']);
    $username = mysql_real_escape_string($_POST['u_name']);
    $email = mysql_real_escape_string($_POST['email']);
    $pass1 = mysql_real_escape_string($_POST['pass1']);
    $pass2 = mysql_real_escape_string($_POST['pass2']); 

    if($pass1 == $pass2)
    {
        $sql = mysql_query($db, "INSERT INTO users(fname, lname, uname, email, password) VALUES ('$f_name', '$l_name', '$u_name', '$email', '$pass1')");
        header("location: home.php");
    }
    else
    {
        header("location: error.php");
    }

}

?>

【问题讨论】:

  • 不要使用已弃用且不安全的 mysql*-函数。它们自 PHP 5.5(2013 年)以来已被弃用,并在 PHP 7(2015 年)中完全删除。请改用 MySQLi 或 PDO。 2.你SQL Injections很开放,应该真正使用Prepared Statements而不是连接你的查询,如果你使用上面提到的MySQLi或PDO,就可以使用。
  • mixed mysql_query ( string $query [, resource $link_identifier = NULL ] )
  • 你有 mysql_query() 的参数顺序向后。查询是第一个,$db 是第二个(并且是可选的)。
  • 如果您升级到mysqli,您的订单将是正确的。
  • 您遇到什么错误?请在此处发布您的错误。另外请添加“echo mysql_error();”在您的 else 语句中使用函数,以便您可以了解脚本中存在的位置和问题。

标签: php mysql database wampserver


【解决方案1】:

最好的方法。转到 phpmyadmin 127.0.0.1/phpmyadmin 或 localhost/phpmyadmin(在 wamp 或 xampp 上),然后转到所需的表并单击插入选项卡。然后根据需要添加值,然后单击 Go。它将显示一个查询副本,将其粘贴到您的代码中并用所需的变量替换数据。完成!

【讨论】:

    【解决方案2】:

    首先验证您的 MySQL 登录数据。 wamp 中的默认 MySQL 没有密码,用户名是 root。进一步正如米兰所说,不使用 MySQL 函数使用 mysqli,改进了 MySQL 接口。试试这个:

    <?php
    session_start();
    
    // I prefer using oop
    $mysql = new mysqli('localhost', 'root', '', 'database');
    // Ofcourse replace them with you own details!
    
    if(isset($_POST['SI'])){
        $firstname = $mysql->real_escape_string($_POST['f_name']);
        $lastname = $mysql->real_escape_string($_POST['l_name']);
        $username = $mysql->real_escape_string($_POST['u_name']);
        $email = $mysql->real_escape_string($_POST['email']);
        $pass1 = $mysql->real_escape_string($_POST['pass1']);
        $pass2 = $mysql->real_escape_string($_POST['pass2']); 
    
        if($pass1 == $pass2){
            $sql = $mysql->query("INSERT INTO users(fname, lname, uname, email, password) VALUES (\"$firstname\", \"$lastname\", \"$username\", \"$email\", \"$pass1\")");
            header("location: home.php");
        }
        else
            header("location: error.php");
    }
    

    看看它是否适合你!

    【讨论】:

    • 第 17 行有未定义的变量。我应该删除变量上的斜线吗?
    • 并确保使用安全性。尝试散列数据并使用安全功能;
    • 使用 htmlentities($string) 防止 XSS,使用 hash('ripemd128', $string) 以加密形式存储并使用stripslashes和标签
    • 注意:未定义变量:第 17 行 C:\wamp\www\worldcuisine\register.php 中的 mysql_query
    • 出现了这个错误,包括这个致命错误:函数名称必须是第 17 行 C:\wamp\www\worldcuisine\register.php 中的字符串
    【解决方案3】:

    请尝试以下代码并在数据库中插入值

         session_start();
        $db = mysqli_connect("localhost", "janrex", "webdev", "cuisine");
    
        if(isset($_POST['SI']))
        {
    
    
          $firstname = mysqli_real_escape_string($_POST['f_name']);
            $lastname = mysqli_real_escape_string($_POST['l_name']);
            $username = mysqli_real_escape_string($_POST['u_name']);
            $email = mysqli_real_escape_string($_POST['email']);
            $pass1 = mysqli_real_escape_string($_POST['pass1']);
            $pass2 = mysqli_real_escape_string($_POST['pass2']); 
    
        if($pass1 == $pass2)
        {
            $sql = mysqli_query($db, "INSERT INTO users(fname, lname, uname, email, password) VALUES ('".$f_name."', '".$l_name."', '".$u_name."', '".$email."', '".$pass1."')");
            header("location: home.php");
        }
        else
        {
            header("location: error.php");
        }
    
    }
    

    【讨论】:

    • 添加一行但不存储任何数据。
    【解决方案4】:

    您似乎有多个问题。您最好使用带有准备好的语句的 mysqli 或 PDO。然后你可以使用 mysqli_real_scape_string API。以下代码是使用 mysqli 与占位符和准备好的语句的示例。

    <?php
    session_start();
    if(isset($_POST['SI']))
    {
        $_user = 'root';
        $_password= 'root';
        $_db = 'localtest'        
        $_host = 'localhost';
        $_port = 3306;
    
        $link = new mysqli($_host, $_user, $_password, $_db);
        // Check connection
        if($link === false){
           die("ERROR: Could not connect. " . mysqli_connect_error());
        }
    
            $firstname = $_POST['f_name'];
            $lastname = $_POST['l_name'];
            $username = $_POST['u_name'];
            $email = $_POST['email'];
            $pass1 = $_POST['pass1'];
            $pass2 = $_POST['pass2']; 
        if($pass1 == $pass2)
        {    
            $stmt = $link-> prepare("INSERT INTO users(fname, lname, uname, email, password) VALUES (?, ?, ?, ?, ?)");
            /* Bind parameters, s - string, b - blob, i - int, etc */
            $stmt -> bind_param("sssss", $firstname, $lastname, $username, $email, $pass1);
            $stmt -> execute();
            $link->close();
            header("location: home.php");
        }
        else
        {
            header("location: error.php");
        }
    }
    

    【讨论】:

      【解决方案5】:

      我知道为什么会这样,因为我遇到了同样的问题。 您已使列唯一(可能是用户 ID 列) 当您插入一个值时,会向该列添加一个默认值。但由于该列是唯一的,它不能包含具有相同值的两个单元格。这会阻止您执行查询命令。

      只需删除该列并尝试。它会工作

      【讨论】:

      • 格式缺少大写字母,没有观察到标点间距。考虑到问题本身的问题,可能存在多个问题而不是答案中提到的问题。答案是猜测 - 最好询问有关问题的更多详细信息。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-06
      • 2017-06-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多