【问题标题】:SQLite3 multithread at same server同一台服务器上的 SQLite3 多线程
【发布时间】:2015-10-22 19:52:59
【问题描述】:

如何在 PHP 中同时执行 SQLite3 exec? 我有这个代码(通过示例):

$bd = new SQLite3("database.db");
$bd->busyTimeout(5000);
$bd->exec("INSERT into 'foo' ('data') values ('bar')");
$bd->close();
unset($bd);

它可以工作,但真正的问题是当我将另一台计算机连接到我的服务器并同时进行插入时(实际上,我在两台计算机上同时按下触发代码的键)并且它显示错误“数据库已锁定”。

我知道使用 pragma WAL 数据库可以在多线程中工作,但它甚至会显示错误。十分感谢!对不起我的英语不好。

【问题讨论】:

    标签: php multithreading sqlite wal


    【解决方案1】:

    问题是sqlite3 使用数据库锁定,而不是像mysqlpostgresql 这样的行或列锁定。如果您想同时做两件事,请尝试使用mysqlpostgresql。在mysql 中,您必须使用create the database。您的代码将如下所示:

    $servername = "localhost";
    $username = "username";
    $password = "password";
    
    try {
        $conn = new PDO("mysql:host=$servername;dbname=myDB", $username, $password);
        // set the PDO error mode to exception
        $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        echo "Connected successfully"; 
        }
    catch(PDOException $e)
        {
        echo "Connection failed: " . $e->getMessage();
        }
    
    $count = $conn->exec("INSERT into 'foo' ('data') values ('bar')");
    $conn = null // close connection
    

    【讨论】:

    • 如果我使用 MongoDB?
    • MongoDB 会很好。关于的查询是一个SQL 查询,所以我假设你想坚持使用mysqlmongodb 虽然很棒。这里有 php mongo db 文档:php.net/manual/en/class.mongodb.php
    猜你喜欢
    • 2021-09-28
    • 1970-01-01
    • 2015-07-12
    • 1970-01-01
    • 2019-10-29
    • 2016-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多