2015-10-22 45 views
1

如何在PHP中同時執行SQLite3 exec? 我有這樣的代碼(舉例):SQLite3多線程在同一臺服務器上

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

而且它的工作原理,但真正的問題是,當我連接另一臺計算機到我的服務器和我做在同一時間(實際上是插入,我按下鍵在兩臺計算機中同時觸發代碼)並顯示錯誤「數據庫已鎖定」。

我知道用編譯WAL數據庫在多線程中工作,但它甚至顯示錯誤。萬分感謝!併爲我的壞英語感到抱歉。

回答

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

如果我使用MongoDB? –

+0

MongoDB會很好。查詢是一個'''SQL''查詢,儘管如此,我假設你想堅持'''mysql'''。 '''mongodb'''雖然很棒。這裏有php mongo db文檔:http://php.net/manual/en/class.mongodb.php –

相關問題