SQLite3多线程在同一台服务器上

时间:2015-10-22 19:53:00

标签: php multithreading sqlite wal

如何在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数据库可以在多线程中工作,但它甚至会显示错误。非常感谢!抱歉我的英语不好。

1 个答案:

答案 0 :(得分:0)

问题是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