MySql:使用PHP在auto_increment字段中插入值

时间:2017-06-20 11:58:48

标签: php mysql auto-increment

我实际上要做的是插入一行:

  

INSERT INTO用户VALUES(col1,col2,...)

其中col1是auto_increment。

PHP代码是:

<?php 
$host = "http://name.altervista.org/";
$user = "name";
$psw = "";
$db = "my_name";

$response = array();
$response["success"] = true;

$connessione = new mysqli($host, $user, $psw, $db);

if($connessione->connect_errno == 0)
{
    $nome = $_POST["nome"];
    $cognome = $_POST["cognome"];
    $username = $_POST["username"];
    $password = $_POST["password"];
    $nTelefono = $_POST["nTelefono"];
    $email = $_POST["email"];

    $sql = "INSERT INTO users 
            VALUES (DEFAULT, '$nome', '$cognome', '$username', '$password', '$nTelefono', '$email')";
    $ris = $connessione->query($sql);

    if($connessione->affected_rows == 1)
    {
        echo(json_encode($response)); 
    }
    else
    {
        $response["success"] = false;
        echo(json_encode($response)); 
    }
}
else
{
    $response["success"] = false;
    echo(json_encode($response)); 
}
?>

我在stackoverflow中搜索类似的问题,我尝试使用DEFAULT或NULL,但它不起作用。如果我输入一个数字而不是表格中尚未显示的默认值,那么我真的不明白问题出在哪里。

你还有其他建议吗?

编辑:数据库上的表结构: click

编辑2:我试图删除表并再次创建它,现在它适用于NULL事物。感谢您的支持!

3 个答案:

答案 0 :(得分:5)

当您执行insert时,列出要插入的所有列。你似乎想要:

INSERT INTO users (nome, cognome, username, password, nTelefono, email)
    VALUES ('$nome', '$cognome', '$username', '$password', '$nTelefono', '$email');

下一步。 从不在数据库中存储明文密码。您应该加密客户端端的值,以便值永远不会通过网络传递。

下一步。学习使用参数化查询。当您使用参数值查询字符串时,您要求出现无法解释的语法错误并使代码受到SQL注入攻击。

答案 1 :(得分:0)

来自Mysql docs

INSERT INTO users VALUES ('$nome', '$cognome', '$username', '$password', '$nTelefono', '$email')";

不需要在INSERT语句中设置auto_increment字段

答案 2 :(得分:0)

在MySQL中,如果你有一个auto_increment列,则不需要将它放在insert语句中。

实施例: 你有桌子:

CREATE TABLE test (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30) NOT NULL
);

您的SQL语句应为:

INSERT INTO test(name) VALUES ('My name');