2013-03-27 78 views
0

下面的代碼沒有任何錯誤運行,雖然它沒有任何東西插入到我的數據庫:插入進不插入

<?php 
$con=mysqli_connect("localhost","root","","teachme"); 
//check connection 
if (mysqli_connect_errno()) 
    { 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
    } 

//add details in database 
if (isset($_POST['user']) and isset($_POST['pass']) and isset($_POST['division'])) { 
    $user = mysql_real_escape_string($_POST['user']); 
    $pass = mysql_real_escape_string($_POST['pass']); 
    $division = mysql_real_escape_string($_POST['division']); 
    mysqli_query($con,"INSERT INTO users (username, password, division, id) 
VALUES ($user, $pass, $division)"); 
    echo 'Succesfully added entries onto the database.. '; 
    echo $user; 
    echo $pass; 
    echo $division; 
    echo '<a href="../">Return to homepage</a>'; 
} 
else { 
    echo "An error occured, try again!"; 
} 
?> 

所有的變量都正確傳輸,這就是爲什麼我用上面的echo語句。 我是新來的,我知道這肯定是一個非常愚蠢的問題。 Database

+0

你確定查詢甚至可以運行嗎?你確定錯誤報告是和? – 2013-03-27 23:50:51

+0

已啓用。嘗試所有建議後,數據庫仍爲空。 – Tom 2013-03-28 00:03:03

+0

粘貼回顯的查詢。 – zad 2013-03-28 00:04:20

回答

2
mysqli_query($con,"INSERT INTO users (username, password, division, id) 
VALUES ($user, $pass, $division)"); 

作爲當前的查詢正試圖插入一列,你已引用4個名,但包括3個變量的引用。

如果你有你的數據庫

AUTO_INCREMENT的ID,你的查詢可以是:

mysqli_query($con,"INSERT INTO users (username, password, division) 
VALUES ($user, $pass, $division)"); 

如果沒有。您需要創建一個每行更新的變量以填充id列參考。

mysqli_query($con,"INSERT INTO users (username, password, division, id) 
VALUES ($user, $pass, $division, $ID_Placeholder)"); // This will not work without a reference. Take this as an example only 

只是爲了測試,這就是問題所在,通過運行該執行插入:

$ID_Placeholder = 4; // just a dummy test variable, to check the insert but also show you where you have went wrong. 
mysqli_query($con,"INSERT INTO users (username, password, division, id) 
VALUES ($user, $pass, $division, $ID_Placeholder)"); 
+0

不。數據庫仍爲空。報告錯誤。 – Tom 2013-03-28 00:01:46

+0

您是否運行了我的最新更新? – 2013-03-28 00:02:35

+0

數據庫仍爲空。 – Tom 2013-03-28 00:04:52

0
mysqli_query($con,"INSERT INTO users (username, password, division, id) 
VALUES ($user, $pass, $division)"); 

你列數不匹配。您正在嘗試填充5個具有3個值的列。只需在value子句中設置「null」或刪除不必要的「目標」列。

0

除了事實,那就是在INSERT聲明字段的數量和上面提到的供應值的數量之間的不匹配,我相信你需要引用值過,像這樣:

mysqli_query($con,"INSERT INTO users (username, password, division) 
VALUES ('$user', '$pass', '$division')"); 

mysql_real_escape_string將處理變量本身的單引號轉義,但不會引用它們給你。

此外,檢查以下內容:

  1. mysqli_query將返回TRUE或FALSE,這取決於刀片是否成功;如果它返回FALSE,請致電mysqli_error瞭解發生了什麼事。
  2. 研究用準備好的語句替換此代碼;有關信息和示例,請參閱here
0
  1. mysql_real_escape_string - 不使用它。

    如果未指定鏈接標識符,則假定由mysql_connect()打開的最後一個鏈接。如果沒有找到這樣的鏈接,它會嘗試創建一個,就好像調用mysql_connect()時沒有參數一樣。 根本不使用mysql_ *。

  2. 不要使用轉義。使用prepared statements

  3. 檢查使用功能的文檔(mysqli_query)。

  4. Mysql錯誤不是PHP錯誤。如果你想看到MySQL錯誤使用mysqli_error

+0

我的錯誤消息:錯誤消息:'字段列表'中的未知列'test' – Tom 2013-03-28 00:49:44

+0

@Tom,請回顯生成的查詢。我不知道你在$ _POST中有什麼。 – sectus 2013-03-28 00:54:16

+0

我在$ user'test'中測試'',在$ pass中測試'test123',在$師中測試'junior' – Tom 2013-03-28 00:58:34