将列ID添加到现有表

时间:2016-03-18 09:18:39

标签: php mysql

我试图添加列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);
}

}




?>
&#13;
&#13;
&#13;

我用Google搜索,发现我可以插入0或null代替我的身份。

我故意读到:

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

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

来自herehere的解决方法似乎无法解决我的问题。

我缺少什么?

2 个答案:

答案 0 :(得分:6)

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

您可以更改SQL以为创建适当ID的ID发送NULL:

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

答案 1 :(得分:1)

在第一个地方添加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');";