В PHP + PDO выберите данные последнего выполненного запроса или заполните вопросительные знаки в запросе соответствующими записями - программирование

В PHP + PDO выберите данные последнего выполненного запроса или заполните вопросительные знаки в запросе соответствующими записями

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

Ниже приведены строки кода, которые я использую

$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));

Я хочу, чтобы текст транзакции имел вопросительные знаки, заполненные соответствующими значениями.

или еще

Могу ли я получить последний выполненный ROW PDO. Я знаю, что мы можем получить ID, но cam мы также получаем полную строку

Любая помощь будет принята с благодарностью.

4b9b3361

Ответ 1

Если вы используете MySQL, вы можете зайти туда, и они (скорее всего) будут иметь полный оператор SQL. Это связано с тем, что PDO по умолчанию эмулирует готовит и фактически отправляет полностью построенные строки SQL на сервер MySQL. На странице руководство PDO::setAttribute страница:

PDO:: ATTR_EMULATE_PREPARES Включает или отключает эмуляцию подготовленных заявления. Некоторые драйверы не поддерживают собственные подготовленные операторы или имеют ограниченную поддержку для них. Используйте этот параметр, чтобы принудительно PDO всегда подражать подготовленным операторам (если TRUE) или пытаться использовать собственные (если FALSE). Он всегда будет возвращаться к эмуляции подготовленный оператор, если водитель не может успешно подготовить текущий запрос.

Команда разработчиков PHP заявляет, что причиной этого является то, что эмуляция выполняется намного быстрее в относительно старых версиях MySQL, которые все еще находятся на большинстве стеков LAMP. По умолчанию это поведение по умолчанию изменится, так как все больше людей используют более новые версии родного драйвера MySQL +.

В противном случае вы можете просто построить полный SQL самостоятельно, так как у вас уже есть оператор и параметры.