SQL插入查询不起作用

时间:2015-12-01 08:43:46

标签: php mysqli phpmyadmin

我正在尝试重新学习SQL和phpmyadmin,但我无法获得SQL连接和查询工作。我正在使用基本表单来确定如何通过表单添加信息。我有一个包含5列的表:user_ID,email,username,first_name和last_name。 user_ID是具有auto-update和bigint属性的主键,而email和username都是唯一键。用户具有以下全局特权:SELECT,INSERT,UPDATE,DELETE和CREATE TEMPORARY TABLES。我希望我能弄清楚出了什么问题,这样我才能继续工作。

编辑:我刚刚验证了我的代码中的'$ cxn'部分正在运行,而这只是我的$ results查询。我也检查过,表单中的所有数据都正确地传递给查询。我还修复了代码的格式,我仍然遇到同样的错误。

$host = 'localhost';
$user = 'users';
$dbpass = 'password';
$dbname = 'users';
$cxn = mysqli_connect($host,$user,$dbpass,$dbname) or die("Could not connect to server.");

if(isset($_POST['submitted']) and $_POST['submitted'] == 'yes')
{
    $query = "insert into 'user_info' ('email', 'username', 'first_name', 'last_name') values ([".$_POST['email']."], [".$_POST['username']."], [".$_POST['first_name']."], [".$_POST['last_name']."])";
    $result = mysqli_query($cxn,$query) or die('Can\'t complete query.');
    echo "Congratulations!"; 
}  

编辑2:根据一些评论的建议,我已将我的代码更改为以下内容。我认为这应该是SQL注入安全的,应该正确格式化。但是,仍然在提交时给我错误,我不确定我还能改变什么。我开始认为数据库本身出了问题,但除了添加用户之外我没有更改任何设置。

$email = $_POST['email'];
        $username = $_POST['username'];
        $first_name = $_POST['first_name'];
        $last_name = $_POST['last_name'];
        $safe_email = mysql_real_escape_string($email);
        $safe_username = mysql_real_escape_string($username);
        $safe_first = mysql_real_escape_string($first_name);
        $safe_last = mysql_real_escape_string($last_name);

        $query = "insert into `user_info` (`email`, `username', `first_name`, `last_name`) values ('$safe_email', '$safe_username', '$safe_first', '$safe_last')";
        $result = mysqli_query($cxn,$query) or die('Can\'t complete query.');
        echo "Congratulations!"; 

3 个答案:

答案 0 :(得分:2)

将插入查询更改为 -

$query = "insert into `user_info` (`email`, `username`, `first_name`, `last_name`) values ('{$_POST['email']}', '{$_POST['username']}', '{$_POST['first_name']}', '{$_POST['last_name']}')";

此外,在注释之后,您的代码将打开以进行SQL注入。请use prepared statements使用参数化查询来避免这种情况。

另请参阅this thread以获取更多信息。

答案 1 :(得分:-1)

请从[]值旁边删除$_POST,并对每个值进行适当的"",如下所示:'".$_POST['email']."'

答案 2 :(得分:-1)

我不确定,但我会做以下事情:

$query = "insert into user_info (email, username, first_name, last_name) values ('".$_POST['email']."', '".$_POST['username']."', '".$_POST['first_name']."', '".$_POST['last_name']."')";
相关问题