Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php SQLite事务不';I don’我没有按预期工作_Php_Sqlite_Pdo_Transactions - Fatal编程技术网

Php SQLite事务不';I don’我没有按预期工作

Php SQLite事务不';I don’我没有按预期工作,php,sqlite,pdo,transactions,Php,Sqlite,Pdo,Transactions,我准备了两个文件,“1.php”和“2.php” “1.php”是这样的 <?php $dbh = new PDO('sqlite:test1'); $dbh->beginTransaction(); print "aaa<br>"; sleep(55); $dbh->commit(); print "bbb"; ?> <?php $dbh = new PDO('sqlite:test1'); $dbh->beginTransaction()

我准备了两个文件,“1.php”和“2.php”

“1.php”是这样的

<?php
$dbh = new PDO('sqlite:test1');
$dbh->beginTransaction();

print "aaa<br>";
sleep(55);
$dbh->commit();

print "bbb";
?>
<?php
$dbh = new PDO('sqlite:test1');
$dbh->beginTransaction();

print "ccc<br>";
$dbh->commit();
print "ddd";
?>

“2.php”是这样的

<?php
$dbh = new PDO('sqlite:test1');
$dbh->beginTransaction();

print "aaa<br>";
sleep(55);
$dbh->commit();

print "bbb";
?>
<?php
$dbh = new PDO('sqlite:test1');
$dbh->beginTransaction();

print "ccc<br>";
$dbh->commit();
print "ddd";
?>

我执行“1.php”。它启动一个事务并等待55秒

因此,当我立即执行“2.php”时,我的期望是:

  • “1.php”正在获取事务和
  • “1”持有数据库锁
  • “2”无法开始交易
  • “2”无法获取数据库锁,因此
  • “2”必须等待55秒
  • 但是,但是测试走了另一条路。当我执行“2”时

  • “2”立即返回结果
  • “2”没有等
  • 所以我不得不认为“1”不能得到事务,或者不能得到数据库锁


    有人能帮忙吗?

    据我所知,SQLite事务不会锁定数据库,除非

    • a。您将它们设置为独占的(默认情况下,它们是延迟的),或者
    • b。实际上,您可以访问数据库
    所以要么你直接打电话

    $dbh->exec("BEGIN EXCLUSIVE TRANSACTION");
    
    或者在开始
    sleep()
    之前对数据库执行写入操作(
    INSERT
    /
    UPDATE

    引用(我的重点):

    交易可以延期, 直接的,排他的默认值 事务行为被延迟。 延迟意味着不需要锁 在数据库上获取,直到 首先访问数据库因此与 延迟的事务,
    开始
    语句本身不起任何作用。
    锁定 直到第一次读取时才获取 或写操作。首读 对数据库的操作将创建 共享锁和第一次写入 操作创建保留锁