0

クエリが正常に実行された後、値が入力された完全なクエリを取得する必要があります (基本的に、クエリ内の疑問符を削除して、対応する値に置き換えたクエリ文字列が必要です) トランザクション ログに使用できるようにします。

以下は、私が使用しているコード行です

$stmt1 = $dbh->prepare("INSERT INTO announcements(id,routeID,ServiceAdvisoryID,ServiceAdvisoryDetailsId) 
VALUES (?,?,?,?)");
        $stmt1->execute(array($aid,$route,$anctype,$announcementid));

トランザクション ログに使用されるクエリは次のとおりです。

    $transactionText = "INSERT INTO announcements(id,routeID,ServiceAdvisoryID,ServiceAdvisoryDetailsId) VALUES (?,?,?,?)";
$stmt2 = $dbh->prepare("insert into transactionLog_tbl(userName,transactionTypeId,transactionTime,transactionText)values(?,?,?,?)");
            $stmt2->execute(array($_SESSION['username'],1,date("y.d.m"),$transactionText));

トランザクション テキストに、対応する値で満たされたクエスチョン マークが必要です。

またはそうでなければ

PDO によって最後に実行された ROW を取得できますか。ID を取得できることはわかっていますが、完全な行も取得できますか?

どんな助けでも大歓迎です。

4

1 に答える 1

2

MySQLを使用している場合は、そこにログインでき、(ほとんどの場合)完全なSQLステートメントがあります。これは、PDOがデフォルトで準備をエミュレートし、完全に構築されたSQL文字列をMySQLサーバーに実際に送信するためです。マニュアルのPDO::setAttributeページから:

PDO::ATTR_EMULATE_PREPARESプリペアドステートメントのエミュレーションを有効または無効にします。一部のドライバーは、ネイティブのプリペアドステートメントをサポートしていないか、サポートが制限されています。この設定を使用して、PDOに常にプリペアドステートメントをエミュレートするか(TRUEの場合)、またはネイティブのプリペアドステートメントを使用しようとします(FALSEの場合)。ドライバーが現在のクエリを正常に準備できない場合は、常に準備済みステートメントのエミュレートにフォールバックします。

PHP開発チームは、この理由は、LAMPスタックインストールの大部分にまだ存在する比較的古いバージョンのMySQLでエミュレーションがはるかに高速に実行されるためであると述べています。このデフォルトの動作は、より多くの人々が新しいバージョンのMySQL+ネイティブドライバーを使用するとすぐに変更されるように設定されています。

それ以外の場合は、ステートメントとパラメーターの両方が既に存在するため、完全なSQLを自分で作成できます。

于 2012-05-18T19:56:23.733 に答える