2013-05-18 110 views
0

我有一個表單將兩個值作爲輸入,並使用post方法將它們解析到下一個文件,我有這段代碼。這應該將這兩個值保存在MySQL數據庫中。但奇怪的是它沒有..和輸出錯誤我得到的是這樣的:0:0:數據庫錯誤。 SQL查詢沒有被執行

$service_name = $_POST['service_name']; 
$service_price = $_POST['service_price']; 

$link = mysql_connect("localhost", "db_user", "pa$$"); 

mysql_select_db("database", $link); 
echo mysql_errno($link) . ": " . mysql_error($link). "\n"; 

mysql_select_db("database", $link); 
mysql_query("INSERT INTO service_tbl(id_service, service_name, service_price) VALUES(NULL,'$service_name','$service_price')", $link); 
echo mysql_errno($link) . ": " . mysql_error($link) . "\n"; 

在我的數據庫表service_tblid_service是AUTO_INCREMENT另兩列是VARCHAR。我在這裏做錯了什麼?

+1

考慮使用'mysqli'或'PDO'而不是'mysql_ *」。 –

回答

1
mysql_query("INSERT INTO service_tbl(service_name, service_price)  VALUES('{$service_name}','{$service_price}')", $link); 

以此爲Id_service是自動increement你不能插入。

+0

不起作用。仍然獲得** 0:0:**作爲輸出! :/ –

+0

檢查你的mysql連接是否正確建立。 $ link = mysql_connect(「localhost」,「db_user」,「pa $$」); 「pa $$」可能會導致問題。 – Rahul11

+0

檢查你的mysql連接是否正確建立。 $ link = mysql_connect(「localhost」,「db_user」,「pa $$」); 「pa $$」可能會導致問題。使用$ link = mysql_connect(「localhost」,「db_user」,「pa $$」)或死(「無法連接到MySQL」); – Rahul11

1

您正在嘗試在自動遞增列中插入NULL,至極是不可能的,只要切換到

mysql_query("INSERT INTO service_tbl(service_name, service_price)  VALUES('$service_name','$service_price')", $link); 

然後我想記住你,mysql_功能已被棄用,所以我會建議你切換到mysqliPDO,事實上,您面臨的風險是sql injection,看看這裏How can I prevent SQL injection in PHP?。您應該使用準備statment以避免任何風險

+0

不起作用。仍然獲得** 0:0:**作爲輸出! :/ –

+0

@hossainahmedsaiman嘗試'echo $ service_name;',它打印什麼? – Fabio

+0

它打印解析的值好吧! –

1

一些ammendments:

  1. 正如在其他的答案/評論已經說了,不要使用過時的mysql_*功能。
  2. 沒有必要爲自動遞增字段傳遞一個值。
  3. 將您的調試輸出更改爲真正的錯誤檢查。
  4. 消除用戶輸入。

修改後的代碼:

$service_name = $_POST['service_name']; 
$service_price = $_POST['service_price']; 

$mysqli = new MySQLi('localhost', 'db_user', 'pa$$', 'database'); 
if ($mysqli->connect_errno) { 
    throw new ErrorException("Failed to connect to MySQL: " . $mysqli->connect_error); 
} 

$query = sprintf("INSERT INTO service_tbl (service_name, service_price) VALUES ('%s', $f)", 
    $mysqli->real_escape_string($service_name), 
    (float)$service_name 
); 
// At this point, you can echo the query to test it in eg. phpMyAdmin 
$result = $mysqli->query($query); 
if ($result === false) { 
    throw new ErrorException("Query failed: " . $mysqli->error); 
} 

printf("Select returned %d rows.\n", $result->num_rows); 

while ($obj = $result->fetch_object()) { 
    print_r($obj); 
} 

// Free result set 
$result->close();