2016-03-18 70 views
1

我試圖添加列ID將是一個主鍵與自動遞增屬性。所以我執行這個SQL查詢:添加列ID到現有的表

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)){ 
 
\t $response["success"]=false; 
 
\t $response["message"]="Email already exists"; 
 
\t echo json_encode($response); 
 
}else{ 
 

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

 
if(mysqli_query($con,$sql_query)){ 
 
\t //echo "<h3> Data Insert success</h3>"; 
 
    $response["success"]=true; 
 
\t $response["message"]="Registration successful"; 
 
\t echo json_encode($response); 
 
} 
 
else{ 
 
\t $response["success"]=false; 
 
\t $response["message"]="Registration unsuccessful"; 
 
\t echo json_encode($response); 
 
} 
 

 
} 
 

 

 

 

 
?>

我用Google搜索了一圈,發現了,我可以在我的地方身份證插入0或空的。

我故意閱讀:

爲了利用該列的自動遞增的能力優勢,將排在該列不提供值。數據庫將爲您提供一個值。

代碼運行良好,當我放棄列ID,但是當我添加它,我得到響應作爲Registration unsuccessful在我的JSON。

herehere解決方法似乎沒有解決我的問題。

我在想什麼?

+1

我不知道我正在讀取sql,但不應該爲ID列允許NULL值。 – jeroen

回答

6

現在表格中有四列,但您只提供了三個值。檢查mysqli_error會給你一個錯誤消息告訴你這一點。

你可以改變你的SQL發送NULL爲其創建一個適當的ID與id:

insert into user_info values(null, 'Foo','[email protected]','password'); 

,或者甚至更好是告訴MySQL你的目標的列。這意味着在未來,如果你添加列的SQL不會打破:

insert into user_info (name,email, password) 
values('Foo','[email protected]','password'); 

注:有一些問題與您的代碼。你很容易被SQL注入 - 如果有人發送惡意值,它可能會運行你不打算的SQL命令。
另外以明文形式存儲密碼不是一個好主意。您應該使用安全算法對它們進行哈希處理。請參閱:http://php.net/manual/en/faq.passwords.php

+0

我只是想了解php-mysql整合,因爲我剛開始。謝謝你的幫助。 –

+0

我要處理哈希密碼,但是sql注入呢? –

+0

通過使用[mysqli_real_escape_string](http://php.net/manual/en/mysqli.real-escape-string.php)或使用[Prepared Statements](http://php.net/manual/en/) mysqli.quickstart.prepared-statements.php)。 – Jim

1

INSERT語法是正確的,你加在首位的ID列前:

$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');";