0

我有一个表单,它接受两个值作为输入,并使用 post 方法将它们解析到我有这段代码的下一个文件中。这应该将这两个值保存在 MySQL 数据库中。但奇怪的是它没有..在我得到的输出错误中是这样的:0:0:

$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。我在这里做错了什么?

4

3 回答 3

1

您正在尝试插入NULL自动增量列,这是不可能的,只需更改为

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

然后我想记住你mysql_不推荐使用函数,所以我建议你切换到mysqli或者PDO确实你有风险sql injection,看看这里如何防止 PHP 中的 SQL 注入?. 您应该使用准备好的陈述来避免任何风险

于 2013-05-18T19:32:02.900 回答
1

一些修改:

  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();
于 2013-05-21T13:36:41.670 回答
1
mysql_query("INSERT INTO service_tbl( service_name, service_price)     VALUES('{$service_name}','{$service_price}')", $link);

将此作为Id_service自动增量使用,您无法插入它。

于 2013-05-18T19:29:18.007 回答