MySql:使用 PHP 在 auto_increment 字段中插入值
MySql: Insert values in an auto_increment field with PHP
我实际上想做的是插入一行:
INSERT INTO users 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));
}
?>
我在Whosebug这里搜索类似的问题,我尝试使用DEFAULT或NULL,但它不起作用。如果我输入一个数字而不是 table 中尚不存在的默认值,它就可以工作,所以我真的不明白问题出在哪里。
您还有其他建议吗?
编辑:数据库中的table结构:
click
编辑 2:我试图删除 table 并重新创建它,现在它可以与 NULL 一起使用。感谢您的支持!
当您执行 insert
时,列出要插入的所有列。你似乎想要:
INSERT INTO users (nome, cognome, username, password, nTelefono, email)
VALUES ('$nome', '$cognome', '$username', '$password', '$nTelefono', '$email');
接下来。 从不 在数据库中存储明文密码。您应该在 客户端 端加密值,这样这些值就永远不会通过网络传递。
接下来。学习使用参数化查询。当您使用参数值修改查询字符串时,您正在询问莫名其妙的语法错误并使代码受到 SQL 注入攻击。
INSERT INTO users VALUES ('$nome', '$cognome', '$username', '$password', '$nTelefono', '$email')";
不需要在 INSERT
语句中设置 auto_increment 字段
在 MySQL 中,如果您有 auto_increment 列,则无需将其放入插入语句中。
示例:
你有 table:
CREATE TABLE test (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30) NOT NULL
);
您的 SQL 语句应该是:
INSERT INTO test(name) VALUES ('My name');
我实际上想做的是插入一行:
INSERT INTO users 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));
}
?>
我在Whosebug这里搜索类似的问题,我尝试使用DEFAULT或NULL,但它不起作用。如果我输入一个数字而不是 table 中尚不存在的默认值,它就可以工作,所以我真的不明白问题出在哪里。
您还有其他建议吗?
编辑:数据库中的table结构: click
编辑 2:我试图删除 table 并重新创建它,现在它可以与 NULL 一起使用。感谢您的支持!
当您执行 insert
时,列出要插入的所有列。你似乎想要:
INSERT INTO users (nome, cognome, username, password, nTelefono, email)
VALUES ('$nome', '$cognome', '$username', '$password', '$nTelefono', '$email');
接下来。 从不 在数据库中存储明文密码。您应该在 客户端 端加密值,这样这些值就永远不会通过网络传递。
接下来。学习使用参数化查询。当您使用参数值修改查询字符串时,您正在询问莫名其妙的语法错误并使代码受到 SQL 注入攻击。
INSERT INTO users VALUES ('$nome', '$cognome', '$username', '$password', '$nTelefono', '$email')";
不需要在 INSERT
语句中设置 auto_increment 字段
在 MySQL 中,如果您有 auto_increment 列,则无需将其放入插入语句中。
示例: 你有 table:
CREATE TABLE test (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30) NOT NULL
);
您的 SQL 语句应该是:
INSERT INTO test(name) VALUES ('My name');