PHP 已准备好 MySQL 字符串中包含变量的 UPDATE 语句

PHP Prepared MySQL UPDATE Statement with Variable inside of a string

我试图在更新查询的字符串中包含一个变量,但似乎遇到了问题。我刚刚更新我所有的旧网站以使用准备好的语句,所以我还不太熟悉它们。我需要做什么来获取查询中连接的字符串和变量。

$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 前加单引号。但我似乎得到的只是错误。任何帮助将不胜感激!

您想要 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