Как я могу одновременно выполнить 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 база данных работает в многопоточном режиме, но даже показывает ошибку. Спасибо большое! и извините за мой плохой английский.
Проблема в 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
Других решений пока нет …