同一台服务器上的 SQLite3 多线程
SQLite3 multithread at same server
如何在 PHP 中同时执行 SQLite3 exec?
我有这段代码(例如):
$bd = new SQLite3("database.db");
$bd->busyTimeout(5000);
$bd->exec("INSERT into 'foo' ('data') values ('bar')");
$bd->close();
unset($bd);
它有效,但真正的问题是当我将另一台计算机连接到我的服务器并同时插入时(真的,我在两台计算机上同时按下触发代码的键)并显示错误 "database is locked".
我知道使用 pragma WAL 数据库可以在多线程下工作,但它甚至会显示错误。十分感谢!抱歉我的英语不好。
问题是 sqlite3
使用数据库锁定,而不是像 mysql
或 postgresql
这样的行或列锁定。如果您想同时做两件事,请尝试使用 mysql, or postgresql. In mysql
you would have to 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
如何在 PHP 中同时执行 SQLite3 exec? 我有这段代码(例如):
$bd = new SQLite3("database.db");
$bd->busyTimeout(5000);
$bd->exec("INSERT into 'foo' ('data') values ('bar')");
$bd->close();
unset($bd);
它有效,但真正的问题是当我将另一台计算机连接到我的服务器并同时插入时(真的,我在两台计算机上同时按下触发代码的键)并显示错误 "database is locked".
我知道使用 pragma WAL 数据库可以在多线程下工作,但它甚至会显示错误。十分感谢!抱歉我的英语不好。
问题是 sqlite3
使用数据库锁定,而不是像 mysql
或 postgresql
这样的行或列锁定。如果您想同时做两件事,请尝试使用 mysql, or postgresql. In mysql
you would have to 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