初学PHP:我无法将数据插入MYSQL数据库

时间:2010-05-12 10:31:37

标签: php mysql

我正在学习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();

?>

当我提交表单时,收到错误消息“发生错误。该项目未添加。”

有谁知道问题是什么?谢谢!

7 个答案:

答案 0 :(得分:4)

这可以为您提供更多信息:

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

答案 1 :(得分:4)

您正在尝试插入名为pumpl2的表,但CREATE TABLE语句创建了一个名为product的表。

此外,作为ZeissS noted,您必须考虑以下因素:

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)

答案 2 :(得分:3)

您只需插入三列但在表格中定义了四列。因此,您必须明确命名列:

 INSERT INTO tableName (ColumnA, ColumnB, ColumnC) VALUES ('A', 'B', 'C')

答案 3 :(得分:2)

$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卡通:

答案 4 :(得分:1)

您的查询错误,您没有指定列。 尝试使用:

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

除此之外,不要使用$ _POST值将它们直接输入数据库。在此搜索SQL注入。首先在$ _POST数据上使用mysql_real_escape_string,甚至更好地使用预准备语句。

答案 5 :(得分:0)

可能有几个原因。

尝试

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

获取更多详细信息,为什么插入不起作用。

答案 6 :(得分:0)

您的表名为products而不是pumpl2。此外,你应该这样做:

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