如何在已创建的数据库PHP中插入新行?

时间:2015-04-28 08:53:00

标签: php mysql database insert

稍后编辑: 它插入一个新行,但只有一个!将一个用户插入我的Users表后,我无法插入其他用户:D(再次)保持警告“无法输入数据”。为什么呢?

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

 $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")));
}

4 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:1)

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);
    ?>

答案 2 :(得分:-1)

$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

答案 3 :(得分:-2)

$sql = "INSERT INTO Users set name='". $numereg ."', password= '". $parolareg ."', rol = '". $user."' ";