#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()
вызов.