我正在使用 MySQL 和准备好的语句来插入BLOB
记录(jpeg 图像)。执行准备好的语句后,我发出一个SELECT LAST_INSERT_ID()
它返回 0。
在我的代码中,我在执行命令后放置了一个断点,并在 MySQL 命令(监视器)窗口中发出SELECT LAST_INSERT_ID()
它返回零。
在 MySQL 命令(监视器)窗口中,我发出一条 SQL 语句来选择所有 ID,最后(唯一)插入的 ID 是 1(一)。
我在用:
- 服务器版本:5.1.46-社区
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。该表是在执行该语句之前创建的,因此这是表中的唯一记录。
Edit:
我将 ID 字段设置为零,并将下一个字段设置为 C++std::istream *
。根据MySQL 手册页LAST_INSERT_ID() http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id:
的价值LAST_INSERT_ID()
如果将行的 AUTO_INCRMENT 列设置为非“魔法”值(即,非 NULL 且非 0 的值).
LAST_INSERT_ID() 应返回 1,因为准备好的语句中的 ID 值为 0。
我是否需要编写准备好的语句来获取 LAST_INSERT_ID?
{搜索网络显示使用自定义 MySQL API,但使用 PHP 和进一步的评论说它需要另一个连接)。