1

我正在尝试创建一个基本的 eshop 作为在线订单的任务(不是为了使用,只是为了我们学习使用 PhP 和 MySQL)。我的初稿有非常简单的表格,具有所有基本功能。但是教授要求我们应该设置产品,以便一个项目可以属于多个类别(我最初将类别表作为一个简单的查找表)。我改变了我的数据库架构如下:

产品的数据库架构

虽然更改其余的 PhP 和 MySQL 命令和查询并不难,但当我需要添加新产品和/或添加类别时,我走到了死胡同。我曾经从 php 中的类别<select>中获取类别 ID,并将其作为变量插入到 mysql 中,但我无法在此数据库中执行此操作,因为在实际插入之前我没有新项目 id(自动增量)产品表。

我能想到的唯一解决方案是将产品插入其表中,通过最新日期选择其 id,然后立即将该 id 与用户选择的任何类别 id 一起插入(这些在 html 表中以及一个复选框)。但是我认为这不是正确的方法,而且我确信有一个更优雅的程序。如果是这样,有人能给我指点一下吗?

4

3 回答 3

1

mysqli_insert_idPHP 的函数(文档)将返回插入对象的自动递增 ID。代码看起来像这样:

$mysqli = new mysqli("localhost", "user", "password", "database");
$mysqli->query("INSERT INTO products (stuff) VALUES (stuff)");
$product_id = $mysqli->insert_id;

此外,您不会使用mysql已弃用的库(假设您现在正在使用它)。

于 2013-05-22T13:54:50.957 回答
0

恰恰相反,您选择的方式要么优雅且直接,除了仅获取必须使用专用 API 调用获取的插入商品 ID 之外。PHP中的每一个mysql API都有对应的方法,mysqli_insert_id()例如

于 2013-05-22T13:53:34.017 回答
0

您可以使用查询来查找表的下一个自动增量值

SELECT AUTO_INCREMENT AS nextAutoId 
FROM information_schema.TABLES 
WHERE TABLE_SCHEMA = '[database_name]' 
   AND TABLE_NAME = '[table_name]'

例如:

test_database.test_table:
+------------+--------------+
| product_id | product_name |
+------------+--------------+
| 1          | Pies         |
| 2          | Chips        |
+------------+--------------+

SELECT AUTO_INCREMENT AS nextAutoId 
FROM information_schema.TABLES 
WHERE TABLE_SCHEMA = 'test_database' 
   AND TABLE_NAME = 'test_table' 

// Outputs: 3
于 2013-05-22T14:00:08.267 回答