¿Por qué db.transaction no funciona con indexeddb?

Soy nuevo en el uso de inxededdb y estoy tratando de obtener datos de una tienda. La tienda contiene datos, pero por alguna razón el código se detiene después de intentar configurar la var tx. Si me falta algo, avíseme. Aquí está la función con la que estoy tratando de obtener el libro:

function getBook(){
    var tx = db.transaction("book", "readonly");
    var store = tx.objectStore("book");
    var index = store.index("by_getid");

    var request = index.get("<?php echo $_GET['book'] ?>");
    request.onsuccess = function() {
      var matching = request.result;
      if (matching !== undefined) {
         document.getElementById("text-container").innerHTML = matching.text;
      } else {
        alert('no match');
        report(null);
      }
    };
}

Versión resuelta:

function getBook(){
    var db;
    var request = indexedDB.open("library", 1);  

    request.onsuccess = function (evt) {
    db = request.result; 
    var transaction = db.transaction(["book"]);
    var objectStore = transaction.objectStore("book");
    var requesttrans = objectStore.get(<?php echo $_GET['book'] ?>);

        requesttrans.onerror = function(event) {

        };

        requesttrans.onsuccess = function(event) {
            alert(requesttrans.result.text);
        };

    };
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta