php - 如何在 PHP 中获取 MySQL 表中刚刚插入的行?

标签 php mysql

我在 MySQL 中有一个表,如下所示:

CREATE TABLE IF NOT EXISTS `play` (
  `identifier` varchar(255) NOT NULL DEFAULT '',
    ... ,
  PRIMARY KEY (`identifier`),
  UNIQUE KEY `identifier` (`identifier`)
)

当我在此表中插入一行时,identifier 列的值可能会被我编写的触发器更改。现在,我尝试从 PHP 在此表中插入一行,该行运行良好,但我需要检索刚刚插入的行中的 identifier 列的内容。

我知道函数mysql_insert_id()存在,但只有当表中有一个自动增量列不适合我的结构时它才起作用。

有没有办法在 PHP 或 SQL 中接收刚刚插入的行?

最佳答案

简短的回答是否定的,您所描述的行为没有内置功能。<​​/p>

但是,可以在 BEFORE INSERT 或 AFTER INSERT 触发器中设置用户定义的变量,例如

SET @new_mytable_identifier_val = NEW.identifier ;

插入之后,您可以立即运行单独的查询来检索用户定义变量的当前值:

SELECT @new_mytable_identifier_val

这必须位于触发触发器的同一 session 中(即执行INSERT的 session )。用户定义的变量在范围内并且在当前 session 中持续存在。请注意,用户定义的变量除了仅在 session 中可用之外,无论如何都不 protected 。 session 中的其他一些语句可能会更改当前分配的值,您需要小心不要“踩踏”触发器分配的值。

您可以使用这样的模式:

SET @new_mytable_identifier_val = '';
INSERT INTO mytable (col) VALUES (val);
SELECT @new_mytable_identifier_val;
SET @new_mytable_identifier_val = '';

请注意,通过这种方法,使用多行插入语句,只有最后分配的值可用。 (您还可以使用它,以便触发器将逗号和新标识符值连接到用户定义变量的现有值中,这样您就可以返回逗号分隔的列表,但这变得非常难看。)

<小时/>

作为替代设计,您可以编写一个派生该值的函数,而不是在触发器内执行派生/赋值。单独调用该函数,传入所需的任何值(如果有),例如:

SELECT get_mytable_new_identifier('fee','fi','fo') AS newid;

newid
-----
42

然后使用函数的返回值并在 INSERT 中使用它

INSERT INTO mytable (identifier,b,c,d,...) VALUES (42,'fee','fi','fo',...)

关于php - 如何在 PHP 中获取 MySQL 表中刚刚插入的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27712838/

相关文章:

java.sql.SQLException : Communication failure during handshake. 是否有服务器在本地主机 :3306? 上运行

php - 为什么我需要 mb_convert_encoding 来显示正确的字符

PHP MySQL 更新查询失败

mysql - 在 mysql 命令行界面中创建新用户

php - 如何修复 'No Suitable Nodes'错误?

php - 使用 MySQL 选择查询时出现问题

javascript - 在商店 Woocommerce 中显示产品下的类别 - 继续显示 '' 数组”

php - 将表值更新到数据库

php - 计算地理邻近度的公式

php - Laravel - 使用 model::create() 时忽略不存在的字段