我在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已經處理了事情?
是一個錯字? '',...);'缺少關閉雙引號 – Ghost 2014-09-03 03:24:00
您可以用準備好的語句替換test_input。他們會自動做些讓你的變量安全的東西。 – 2014-09-03 03:25:04
您的代碼存在很多問題,但最好的建議是Andrew P所說的,並使用準備好的語句來處理此問題。 mysqli_real_escape,trim,stripslashes和htmlspecialchars在解碼前端數據時會導致頭痛,而mysqli_real_escape_string並不如你想像的那樣安全。您的錯誤「列計數與第1行的值計數不匹配」與SQL語句相關,即使您「知道值匹配」,錯誤也不會。 – jbrahy 2014-09-03 03:31:24