【问题标题】:How to insert new row into a already created database PHP?如何将新行插入到已创建的数据库 PHP 中?
【发布时间】:2015-04-28 08:53:00
【问题描述】:

稍后编辑: 它可以插入一个新行,但只有一个!将一个用户插入我的用户表后,我无法插入其他用户:D 它(再次)不断提醒“无法输入数据”。为什么?

我已经有一个名为“problema_curs_1”的数据库,我想在我的用户表中插入一个新行。 这是代码:

 $db['user'] = 'root';
 $db['pass'] = '';
 $db['server'] = 'localhost';
 $conn = mysql_connect($db['server'], $db['user'], $db['pass']);
        if(! $conn )
        {
            die(json_encode(array("mesaj" => "'Could not connect: ")));
        }
        $sql = "INSERT INTO Users ('nume', 'password', 'rol') VALUES($numereg,$parolareg,'user')";
        mysql_select_db('problema_curs_1');
        $retval = mysql_query( $sql, $conn );
        if(! $retval )
        {
            die(json_encode(array("mesaj" => "Could not enter data:")));
        }
        echo "Entered data successfully\n";
        mysql_close($conn);

弹出“无法输入数据:”。 我的表有 4 列:ID、“nume”、“password”和“rol”。 ID 设置为自动递增,这就是我不想手动插入的原因。

*我将在我的 register() 函数中使用它。 *如果有帮助,我可以把我写 login() 部分的方式放在这里,这似乎有效:

function login($nume,$parola)
{
    $db['user'] = 'root';
    $db['pass'] = '';
    $db['server'] = 'localhost';
    $conn = mysql_connect($db['server'], $db['user'], $db['pass']);
    $sql = "SELECT id FROM `Users` WHERE nume ='".$nume."' ANY password = '".md5($parola)."'";
    $q = mysql_query($sql);

    if(!$q)
        die(json_encode(array("mesaj" => "Invalid")));
    else{
        $x = mysql_fetch_array($q);
        if (empty($x))
            die(json_encode(array('mesaj' => 'User does not exist')));
        else {
        //    $user = new User($x['id']);
            session_start();
            $_SESSION['user_id'] = $x['id'];
            $_SESSION['loggedin'] = "yes";
            die(json_encode(array("mesaj"=>"Congrats :)")));
        }

        }
    //nu prea are cum sa ajunga aici
    die(json_encode(array("mesaj"=>"You were not logged")));
}

【问题讨论】:

    标签: php mysql database insert


    【解决方案1】:

    您将 varchar 类型变量作为整数传递。

    INSERT INTO Users ('nume','password','rol') VALUES($numereg,$parolareg,user)
    

    INSERT INTO Users (nume,password,rol) VALUES('$numereg','$parolareg','user')
    

    您正在直接传递可能导致 SQL INJECTION 的值,我希望您会清理参数或将它们作为安全参数传递。

    【讨论】:

    • 谢谢!我将其更改为 $sql = "INSERT INTO Users ('nume', 'password', 'rol') VALUES('$numereg','$parolareg','user')";仍然没有得到数据:(
    • @Lulu 也取消引用列名
    • 插入用户(nume,password,rol)VALUES('$numereg','$parolareg','user')
    • 太棒了!现在我有另一个问题:在我的用户表中插入一个用户后,我无法插入其他用户:D 它(再次)不断提醒“无法输入数据”
    • @Lulu 检查所有唯一约束,检查值并查看它是否有效...写下 SHOW CREATE TABLE Users;并运行此查询..在此处粘贴输出..
    【解决方案2】:
    You were missing `` symbol in insert query . I have checked this code .Try this code ,hope it will solve your problem.
    
    
    <?php 
         $db['user'] = 'root';
         $db['pass'] = '';
         $db['server'] = 'localhost';
         $conn = mysql_connect($db['server'], $db['user'], $db['pass']);
                if(! $conn )
                {
                    die(json_encode(array("mesaj" => "'Could not connect: ")));
                }
                $sql = "INSERT INTO Users (`name`, `password`, `rol`)     VALUES('dfghfg','dfghdf','45456345')";
                mysql_select_db('problema_curs_1');
                $retval = mysql_query($sql);
                if(! $retval )
                {
                    die(json_encode(array("mesaj" => "Could not enter data:")));
                }
                echo "Entered data successfully\n";
                mysql_close($conn);
        ?>
    

    【讨论】:

      【解决方案3】:
      $sql = "INSERT INTO Users ('nume', 'password', 'rol') VALUES($numereg,$parolareg,'user')";
      

      在这一行中,您只需插入变量。这不起作用,因为你没有引号,而且它也很不安全(例如 SQL 注入)。

      你应该怎么做?这是一种方式:

      $sql = "INSERT INTO `Users` (`nume`, `password`, `rol`) VALUES('" .mysql_real_escape_string($numereg) . "', '" . mysql_real_escape_string($parolareg) ."','user')";
      

      始终对表名和字段名使用反引号(而不是引号)。

      另外:不要使用 mysql_* 函数,而是使用 PDO 或 Mysqli_* 函数。
      更多信息请参考Why shouldn't I use mysql_* functions in PHP?

      此答案的更多参考:
      SQL injection
      mysql_real_escape_string function

      【讨论】:

        【解决方案4】:
        $sql = "INSERT INTO Users set name='". $numereg ."', password= '". $parolareg ."', rol = '". $user."' ";
        

        【讨论】:

        • @Blaatpraat 实际上是这样,对于插入,您也可以使用 SET
        • @Daan 作为 MySQL 扩展有效,但作为 SQL 查询无效。不过它会起作用(因为 OP 正在使用 MySQL)...
        • 我同意这不是标准 SQL。
        • 问题被标记为mysql,OP 使用的是mysql_,并且此语法与MySQL INSERT syntax 兼容,所以我在这里看不到任何问题。
        猜你喜欢
        • 1970-01-01
        • 2017-07-18
        • 2017-06-06
        • 1970-01-01
        • 2021-10-31
        • 1970-01-01
        • 1970-01-01
        • 2021-11-05
        • 2019-03-22
        相关资源
        最近更新 更多