2014-09-03 23 views
-1

我在MySQL中編寫了一個相當大的表。這是我到目前爲止有:MySQL使用自動遞增計數器向表中添加東西

$con=mysqli_connect("127.0.0.1","//removed for safety","//removed for safety", "mydb"); 
// Check connection 
if (mysqli_connect_errno()) 
{ 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 
$firstname = mysqli_real_escape_string($con, test_input($_POST['firstname'])); 
$lastname = mysqli_real_escape_string($con, test_input($_POST['lastname'])); 
$middleinitial = mysqli_real_escape_string($con, test_input($_POST['middleinitial'])); 
$school = mysqli_real_escape_string($con, test_input($_POST['school'])); 

...等等

function test_input($data) 
{ 
    $data = trim($data); 
    $data = stripslashes($data); 
    $data = htmlspecialchars($data); 
    return $data; 
} 

我是相當新的MySQL和我的表包括一個自動遞增計數器,ID,開始於1 。我相信這會導致此代碼顯示錯誤消息,因爲錯誤消息顯示「列計數與第1行的值計數不匹配」(我的表現在有點不合適,但我知道這些值與列):

$sql = "INSERT INTO User VALUES('$username', '$password', '$school', ...)"; 

if (!mysqli_query($con, $sql)) 
{ 
    die('Error: ' . mysqli_error($con)); 
} 

echo "added results"; 

由於我是新手,我不太清楚如何處理這裏的自動增量情況。我試圖在'$ username'之前添加'NULL',但這沒有幫助。我如何告訴計算機讓MySQL自己照顧ID計數器?或者我的代碼還有其他問題嗎?

P.S.我真的需要test_input函數,還是mysqli_real_escape_string已經處理了事情?

+0

是一個錯字? '',...);'缺少關閉雙引號 – Ghost 2014-09-03 03:24:00

+1

您可以用準備好的語句替換test_input。他們會自動做些讓你的變量安全的東西。 – 2014-09-03 03:25:04

+0

您的代碼存在很多問題,但最好的建議是Andrew P所說的,並使用準備好的語句來處理此問題。 mysqli_real_escape,trim,stripslashes和htmlspecialchars在解碼前端數據時會導致頭痛,而mysqli_real_escape_string並不如你想像的那樣安全。您的錯誤「列計數與第1行的值計數不匹配」與SQL語句相關,即使您「知道值匹配」,錯誤也不會。 – jbrahy 2014-09-03 03:31:24

回答

1

具體。將列名稱用於可以插入值的位置。

產品號:對於帶有AUTO_INCREMENT的id,您不需要指定列名稱及其值。

$sql = "INSERT INTO User (col1, col2, col3) VALUES('$username', '$password', '$school'); 

在這個例子中。 col1是你插入的值$username

0

你的自動增量會跟蹤自己;否則,將是「自動增量」不「自動」

0

AUTO_INCREMENT會自動通過數據庫統計,這樣你就不必在PHP代碼中插入

$sql = "INSERT INTO User (col1, col2, col3) VALUES('$username', '$password', '$school'); 

但是,如果你用PHP編寫,你也可以這樣做

$sql = "INSERT INTO User (id, col1, col2, col3) VALUES(0,'$username', '$password', '$school'); 

這將不插入值0到列,因爲它會自動通過數據庫

希望這有助於自動遞增