【发布时间】:2011-02-26 01:49:39
【问题描述】:
我正在使用 MySQL 和准备好的语句来插入 BLOB 记录(jpeg 图像)。执行准备好的语句后,我发出一个SELECT LAST_INSERT_ID(),它返回0。
在我的代码中,我在执行命令之后放置了一个断点,在 MySQL 命令(监视器)窗口中,我发出了SELECT LAST_INSERT_ID(),它返回零。
在 MySQL 命令(监视器)窗口中,我发出一条 SQL 语句来选择所有 ID,最后(唯一)插入的 ID 为 1(一)。
我正在使用:
- 服务器版本:5.1.46-community MySQL 社区服务器 (GPL)
- Visual Studio 2008,版本 9。
- MySQL 连接器 C++ 1.0.5
我的表说明:
mysql> describe picture_image_data;
+---------------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+------------------+------+-----+---------+----------------+
| ID_Image_Data | int(10) unsigned | NO | PRI | NULL | auto_increment |
| Image_Data | mediumblob | YES | | NULL | |
+---------------+------------------+------+-----+---------+----------------+
2 rows in set (0.19 sec)
使用 MySQL 监视器的结果:
mysql> select ID_Image_Data
-> from picture_image_data;
+---------------+
| ID_Image_Data |
+---------------+
| 1 |
+---------------+
1 row in set (0.00 sec)
mysql> SELECT LAST_INSERT_ID();
+------------------+
| LAST_INSERT_ID() |
+------------------+
| 0 |
+------------------+
1 row in set (0.00 sec)
准备好的语句:
INSERT INTO Picture_Image_Data
(ID_Image_Data, Image_Data)
VALUES
(?,
?);
以上结果显示 ID_Image_Data 字段为 1,但 LAST_INSERT_ID 为 0。该表是在执行此语句之前创建的,因此这是表中唯一的记录。
编辑:
我将 ID 字段设置为零,将下一个字段设置为 C++ std::istream *。根据MySQL Manual Page for LAST_INSERT_ID():
如果将行的 AUTO_INCREMENT 列设置为非“魔术”值(即,非 NULL 且非 0 的值),LAST_INSERT_ID() 的值不会改变强>)。
LAST_INSERT_ID() 应该返回 1,因为准备好的语句中的 ID 值为 0。
我是否需要为获取 LAST_INSERT_ID 编写准备好的语句?
{搜索网络显示使用自定义 MySQL API,但使用 PHP 和其他 cmets 表示需要另一个连接。
【问题讨论】:
-
Last_insert_id 是特定于连接的,您在哪里执行准备好的插入?
标签: c++ mysql prepared-statement mysqldump