PHP подготовил инструкцию ОБНОВЛЕНИЯ MySQL с переменной внутри строки

#php #mysql #sql #sql-update #sql-insert

#php #mysql #sql #sql-обновление #sql-вставка

Вопрос:

Я пытаюсь включить переменную внутри строки в запрос на обновление, но, похоже, у меня возникли проблемы. Я только сейчас обновляю все свои старые веб-сайты, чтобы использовать подготовленные инструкции, поэтому я еще не знаком с ними. Что мне нужно сделать, чтобы связать строку и переменную в запросе.

 $insert = $pdo->prepare("INSERT INTO trees (name, unit) VALUES(:name, :unit)");
$insert->execute([
    'name' => $name,
    'unit' => $unit
]);
$insertid = $pdo->lastInsertId();
// THIS LINE SPECIFICALLY IS WHERE MY PROBLEM IS    vvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
$update = $pdo->prepare("UPDATE trees SET filename='tree_".$insertid."_:file_name' WHERE id=:insertid");
$update->execute([
    'file_name' => $file_name,
    'insertid' => $insertid
]);
 

Я пробовал без одинарных кавычек, с одинарными кавычками перед :file_name . Но все, что я, кажется, получаю, это ошибки. Любая помощь будет с благодарностью!

Комментарии:

1. Хорошая работа по обновлению до подготовленных инструкций.

Ответ №1:

Вы хотите concat() , и запрашивать параметры, а не конкатенацию строк:

 UPDATE trees 
SET filename = CONCAT('tree_', :insertid, '_', :file_name) 
WHERE id = :insertid
 

На самом деле, CONCAT_WS() здесь пригодится:

 UPDATE trees 
SET filename = CONCAT_WS('_', 'tree', :insertid, :file_name) 
WHERE id = :insertid
 

Комментарии:

1. Вы также можете создать одну переменную в PHP, а затем связать ее, например "filename" => "_tree$insertid$filename" , которая может входить в execute() вызов.