簡體   English   中英

初學者PHP:我無法將數據插入MYSQL數據庫

[英]Beginner PHP: I can't insert data into MYSQL database

我現在正在學習PHP,並且試圖將數據插入到名為“ pumpl2”的MySQL數據庫中。表的設置如下。

create table product
 ( productid int unsigned not null auto_increment primary key,
   price int(9) not null,
   value int(9) not null,
   description text
 );

我有一個表單,想要從表單中的字段插入數據庫。 這是php文件的樣子。

<?php

// create short variable names
$price = $_POST['price'];
$value = $_POST['value'];
$description = $_POST['description'];

if (!$price || !$value || !$description) {
 echo "You have not entered all the required details.<br />"
  ."Please go back and try again.";
 exit;
}

@ $db = new mysqli('localhost', 'pumpl', '********', 'pumpl2');

if (mysqli_connect_errno()) {
 echo "Error: Could not connect to database. Please try again later.";
 exit;
}

$query = "insert into pumpl2 values
 ('".$price."', '".$value."', '".$description."')";
$result = $db->query($query);

if ($result) {
 echo  $db->affected_rows." product inserted into database.";
} else {
 echo "An error has occurred.  The item was not added.";
}

$db->close();

?>

提交表單時,出現錯誤消息“發生錯誤。未添加項目。”

有人知道問題出在哪里嗎? 謝謝!

這應該給您更多信息:

echo "An error has occurred: " . $db->error();

您試圖將其插入到名為pumpl2的表中,但是CREATE TABLE語句創建了一個名為product的表。

此外,正如ZeissS指出的那樣 ,您必須考慮以下幾點:

CREATE TABLE product ( 
    productid int unsigned not null auto_increment primary key,
    price int(9) not null,
    value int(9) not null,
    description text
);
Query OK, 0 rows affected (0.09 sec)

INSERT INTO product VALUES (1, 1, 'test');
ERROR 1136 (21S01): Column count doesn't match value count at row 1

要解決該錯誤,您需要顯式指定列的列表:

INSERT INTO product (price, value, description) VALUES (1, 1, 'test');
Query OK, 1 row affected (0.03 sec)

您僅插入三列,但表中定義了四列。 因此,您必須明確命名列:

 INSERT INTO tableName (ColumnA, ColumnB, ColumnC) VALUES ('A', 'B', 'C')
$query = "insert into pumpl2.product (price, value, description) values('" .
         $db->read_escape_string($price) . "', '".
         $db->read_escape_string($value) . "', '" .
         $db->read_escape_string($description) . "')";
$result = $db->query($query);

還有一個強制性的XKCD卡通:

您的查詢是錯誤的,您沒有指定列。 嘗試使用:

"INSERT INTO pumpl2 (price, value, description) VALUES ('".$price."', '".$value."', '".$description."')"

除此之外,請勿使用$ _POST值將其直接輸入數據庫。 在這一方面搜索SQL注入。 首先在$ _POST數據上使用mysql_real_escape_string,甚至更好地使用預處理語句。

這可能是幾個原因。

嘗試

echo "Errormessage: ".$db->error;

要獲取更多詳細信息,為什么插入不起作用。

您的表稱為products而不是pumpl2 此外,您應該執行以下操作:

insert into product (price, value, description) values ( ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM