将列 ID 添加到现有表

Posted

技术标签:

【中文标题】将列 ID 添加到现有表【英文标题】:Add column id to an existing table 【发布时间】:2016-07-04 23:25:44 【问题描述】:

我试图添加列 id,这将是具有自动增量属性的主键。所以我执行这个 SQL 查询:

ALTER TABLE  `user_info` ADD  `id` INT NULL AUTO_INCREMENT PRIMARY KEY FIRST ;

列创建成功,甚至为已有数据创建id。

但我无法再在表格中插入任何内容了。

<?php
require "init.php";
$name=$_POST["user"];
$user_email=$_POST["user_email"];
$user_pass=$_POST["user_pass"];

$sql_query="SELECT * FROM user_info WHERE user_email='$user_email'";
$check=mysqli_fetch_array(mysqli_query($con,$sql_query));

if(isset($check))
	$response["success"]=false;
	$response["message"]="Email already exists";
	echo json_encode($response);
else

	$sql_query="insert into user_info values('$name','$user_email','$user_pass');";

if(mysqli_query($con,$sql_query))
	//echo "<h3> Data Insert success</h3>";
    $response["success"]=true;
	$response["message"]="Registration successful";
	echo json_encode($response);

else
	 $response["success"]=false;
	$response["message"]="Registration unsuccessful";
	echo json_encode($response);







?>

我搜索了一下,发现我可以插入 0 或 null 来代替我的 id。

我故意读到:

为了利用列的自动递增功能,插入行时不要为该列提供值。数据库将为您提供一个值。

当我删除列 id 时代码运行良好,但当我添加它时,我在我的 json 中得到Registration unsuccessful 的响应。

here 或 here 的解决方法似乎没有解决我的问题。

我错过了什么?

【问题讨论】:

我不确定我是否正确读取了 sql,但您不应允许 ID 列使用 NULL 值。 【参考方案1】:

您的表中现在有四列,但是您只提供了三个值。检查mysqli_error 会给你一个错误消息告诉你这个。

您可以更改您的 SQL 以发送 NULL 的 id,创建一个适当的 id:

insert into user_info values(null, 'Foo','Foo@example.com','password');

或者,更好的方法是告诉 MySQL 您要定位哪些列。这意味着将来如果您添加列,您的 SQL 将不会中断:

insert into user_info (name,email, password)
values('Foo','Foo@example.com','password');

注意:您的代码存在一些问题。您很容易受到 SQL 注入攻击 - 如果有人发送恶意值,它可能会运行您不希望的 SQL 命令。 此外,以纯文本形式存储密码并不是一个好主意。您应该使用安全算法对它们进行散列。见:http://php.net/manual/en/faq.passwords.php

【讨论】:

我只是想了解 php-mysql 的集成,因为我刚开始。感谢您的帮助。 我将处理散列密码,但是 sql 注入呢? 使用mysqli_real_escape_string 或Prepared Statements。【参考方案2】:

在您首先添加 ID 列之前,您的 INSERT 语法是正确的:

$sql_query="insert into user_info values('$name','$user_email','$user_pass');";

但现在您应该指定 VALUES 之前的列:

$sql_query="insert into user_info (name,email, password) values('$name','$user_email','$user_pass');";

【讨论】:

以上是关于将列 ID 添加到现有表的主要内容,如果未能解决你的问题,请参考以下文章

MariaDB 将列动态添加到现有表

将列添加到现有 SQL Server 表 - 含义

text 将列添加到现有表

php 将列添加到现有表迁移

将列动态添加到现有 BigQuery 表

markdown 使用迁移将列添加到现有表