Многопоточный SQLite3 на том же сервере

Как я могу одновременно выполнить SQLite3 exec в PHP?
У меня есть этот код (на примере):

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

И это работает, но настоящая проблема заключается в том, что когда я подключаю другой компьютер к своему серверу и одновременно делаю вставку (на самом деле, я нажимаю клавишу, которая одновременно запускает код на обоих компьютерах), и она показывает ошибку msgstr «база данных заблокирована».

Я знаю, что с прагмой WAL база данных работает в многопоточном режиме, но даже показывает ошибку. Спасибо большое! и извините за мой плохой английский.

1

Решение

Проблема в sqlite3 использует блокировку базы данных, в отличие от блокировки строк или столбцов, как mysql или же postgresql, Если вы хотите сделать две вещи одновременно, попробуйте использовать MySQL, или же PostgreSQL. В mysql вам бы пришлось создать базу данных. Ваш код будет выглядеть примерно так:

$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
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]