gpt4 book ai didi

mysql - 是否可以依次插入然后选择插入的行?

转载 作者:可可西里 更新时间:2023-11-01 07:37:33 25 4
gpt4 key购买 nike

我执行了两个查询一个接一个:一个是 INSERT,另一个是 SELECT,它选择插入的行。虽然该行已成功插入(我可以在数据库中看到它),但选择查询无法返回该行。

当我再次执行 SELECT 查询时,它返回了正确的结果。

插入:

    $stmt = $pdo->prepare('INSERT INTO user (id ,name, lastname ,birthday, social_type, social_id) VALUES(NULL, :name, :lastname, :birthday, :social_type, :social_id)');
$success=$stmt->execute(array(
':name' => $user['name'],
':lastname' => $user['lastname'],
':birthday' => $user['birthday'],
':social_type' => $user['social_type'],
':social_id' => $user['social_id']
));

选择

    $stmt = $pdo->prepare('SELECT * FROM user WHERE social_id = :social_id AND social_type = :social_type LIMIT 1');
$stmt->execute(array(
'social_id' => $user['social_id'],
'social_type' => $user['social_type'] ));
$result = $stmt->fetch(PDO::FETCH_ASSOC);

最佳答案

如果您正在使用 INNODB:

如果你使用的是 INNODB,既然你验证了行被插入,它应该是与 SELECT 一起返回,只要 SELECT 正在查询实际行的键那是插入的。 (你确定你没有使用像 INSERT DELAYED 这样的功能吗?那可以防止返回该行。)

如果您正在使用 MYISAM:

因为 MyISAM 不支持事务,SELECT 应该返回插入,但是我找不到任何说明这实际上是有保证的。

注意:下面列出的第一个 URL 说明您是否使用 MYISAM(根据此链接的默认设置),INSERTS 将锁定表。但是,第二个 URL 指出插入放置的锁是可读锁,因此这不应该阻止读取表。

http://www.sitepoint.com/mysql-mistakes-php-developers/

http://aarklondatabasetrivia.blogspot.com/2009/04/how-to-lock-and-unlock-tables-in-mysql.html

如果您使用的是 INNODB(续):

    如果您的系统中正在使用 AUTOCOMMIT(我不确定),您应该已经看到 选定的行(这个问题表明插入的行被验证为具有 已添加到数据库中)。

    如果一个事务正在使用中,那么这个事务一定已经提交了(这个问题声明插入的行已被验证为已添加到数据库中)。

    你确定第一次执行的SELECT查询是同一个吗作为第二次?

    你确定 $user['social_id'] 在INSERT 和 SELECT 的时候?

    如果出于某种原因,您正在使用 INSERT DELAYED,则可能不会返回该行


注意事项:根据这个 URL,如果你已经开始了一个交易,选择的行显示在下一个 SELECT 语句中(不在 PHP 中):

http://zetcode.com/databases/mysqltutorial/transactions/

此声明意味着如果您开始交易,则无需设置自动提交:

“MySQL 还会自动提交不属于事务的语句。”

此 URL 描述了如何在 PHP 中启动事务:

PHP + MySQL transactions examples

关于mysql - 是否可以依次插入然后选择插入的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14201947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com