【问题标题】:Getting error in inserting data to sql database [duplicate]将数据插入sql数据库时出错[重复]
【发布时间】:2015-06-26 06:58:17
【问题描述】:

这是我的代码:

<?php
error_reporting(E_ALL ^ E_NOTICE);
    ini_set('display_errors', '1');

    DEFINE ('DB_HOST', 'localhost');
    DEFINE ('DB_USER', 'root');
    DEFINE ('DB_PSWD', '');
    DEFINE ('DB_NAME', 'facebooklogin');
    $connection = mysql_connect(DB_HOST, DB_USER, DB_PSWD) or die(mysql_error());
    $db = mysql_select_db(DB_NAME, $connection) or die(mysql_error());

    $register_firstname = $_POST['register_password'];
    $register_lastname = $_POST['register_password'];
    $register_username = $_POST['register_username'];
    $register_password = $_POST['register_password'];
    $register_confirm_password = $_POST['register_confirm_password'];
    $register_email = $_POST['register_email'];

    $register_firstname = mysql_real_escape_string($register_firstname);
    $register_lastname = mysql_real_escape_string($register_lastname);
    $register_username = mysql_real_escape_string($register_username);
    $register_password = mysql_real_escape_string($register_password);
    $register_confirm_password = mysql_real_escape_string($register_confirm_password);
    $register_email = mysql_real_escape_string($register_email);

    $query = "SELECT * FROM users WHERE username='$register_username'";
    $result = mysql_query($query);
    $count = mysql_num_rows($result);
    if($count == 1){
        echo "That username is taken. Please try another.";
    }else{
        $query = "SELECT * FROM users WHERE email='$register_email'";
        $result = mysql_query($query);
        $count = mysql_num_rows($result);
        if($count == 1){
            echo "That email is already in use. Please try again.";
        }else{
            if(strlen($register_firstname) == 0 or strlen($register_lastname) == 0 or strlen($register_username) == 0 or strlen($register_password) == 0 or strlen($register_confirm_password) == 0 or strlen($register_email) == 0){
                echo "Please complete all forms.";
            }else if(strlen($register_username) < 3 or strlen($register_username) > 12){
                echo "Username must be between 3 and 12 characters.";
            }else if(strlen($register_password) < 5 or strlen($register_password) > 12){
                echo "Password must be between 5 and 12 characters.";
            }else if($register_password != $register_confirm_password){
                echo "Passwords do not match. Please try again.";
            }else{
                $dbinsert = "INSERT INTO users (username, password, first_name, last_name, email) VALUES ('$register_username', '$register_password', '$register_firstname', '$register_lastname', '$register_email')";
                if(!mysqli_query($dbinsert)){
                    die("Error registering new user in database.");
                }
                echo "Registered!";
            } 
        }
    }
?>

<html>
<head>
    <title>registered</title>
</head>
</html>

当我运行它时,我得到 2 个错误:不推荐使用:mysql_connect():不推荐使用 mysql 扩展并将在将来删除:请改用 mysqli 或 PDO

警告:mysqli_query() 至少需要 2 个参数,给定 1 个

有人能弄清楚这段代码中的错误是什么,请修复它。

【问题讨论】:

  • 您在同一代码中同时混合了mysql_*mysqli_*。你应该只使用mysqli_*,因为 `mysql_* 已被贬值。
  • 这个怎么样? mysqli_query() 至少需要 2 个参数 @TimBezhashvyly
  • else if -> elseif

标签: php sql


【解决方案1】:

因为,您在代码中的任何地方都使用了mysql_*。看来问题出在您的 else 声明中。您应该在 else 语句中使用 mysql_query 而不是 mysqli_query

else{
 $dbinsert = "INSERT INTO users (username, password, first_name, last_name, email) VALUES ('$register_username', '$register_password', '$register_firstname', '$register_lastname', '$register_email')";
 if(!mysql_query($connection,$dbinsert)){
 die("Error registering new user in database.");
  }

P.S:您应该考虑使用mysqliPDO 而不是mysql,因为它已被贬值,稍后将被删除。

【讨论】:

  • 这是错误的建议You should use mysql_* not mysqli_*mysqli 比mysql 连接更安全。也许不是should,而是could
  • 对不起,先生,因为 OP 在与mysqli_query 相关的代码中存在问题所以,我刚刚指出了他。 @StanislovasKalašnikovas
  • 注意,软件安全性相当严重。是的,您可以使用本地服务器上的旧代码使代码正常工作,但是一旦您开始使用它,您可能会遇到麻烦或更糟的是,您最终会遇到重大代码漏洞。我通常发现最好不要养成坏习惯,因为用户最终将不得不重写他们所有的代码(我从个人经验说。我对我的一些旧代码不寒而栗):)
  • 我完全同意你@nomistic 的观点,你为我提供了最有价值的信息作为建议的一部分。 :)
  • @KumariAnjali,我在下面添加了一些编辑来帮助您。我知道这似乎需要考虑很多,但一旦你朝着这个方向前进,你会发现它不再困难,而且编码过程会更干净、更快,还有其他好处:)
【解决方案2】:

您的错误来自两个地方。

  1. 第一个是指mysql_connect弃用这一事实。这是您的代码给您的严重警告。是的,您可以更正您的代码以使其正常工作,但它将在未来的 php 版本中停止工作

  2. mysqli_query 的语法要求连接到数据库作为参数。要正确使用它,请使用

mysqli_query($conection,$dbinsert)

像这样:

if(!mysqli_query($conection,$dbinsert)){
                die("Error registering new user in database.");
            }

请注意,您需要在此处执行相同的操作(以及您使用已弃用功能的任何其他地方:

 $result = mysql_query($query);

应该是:

$result = mysqli_query($connection, $query);

等等。还请查看您的 mysql_num_rows 并使用以下内容:http://www.w3schools.com/php/func_mysqli_num_rows.asp

再修改:
查看代码中使用旧 mysql_ 语法连接到数据库的任何 php 连接并更新它。这包括mysql_connectmysql_select_dbmysql_real_escape_stringmysql_querymysql_num_rows,以及您倾向于使用这些的任何其他地方。

除了mysqli,还有其他选项,例如PDO。两者都很好。我也认真地建议考虑准备你的陈述。这既可以加速大型插入、更新、选择等,而且 a) 提高安全性(它们实际上消除了大多数 sql 注入攻击;至少是脚本小子攻击),b) 消除了任何需要记住逃避所有你的变量(一个不错的奖励)。

【讨论】:

  • 当然,如果您希望错误(通知)消失(在编码过程中不建议这样做),您可以删除代码顶部的错误报告行。但是,我推荐这个
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-03
  • 2017-12-28
  • 1970-01-01
相关资源
最近更新 更多