稍后编辑: 它插入一个新行,但只有一个!将一个用户插入我的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")));
}
答案 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."' ";