PHP 准备 MySQL UPDATE 语句,其中包含字符串中的变量
Posted
技术标签:
【中文标题】PHP 准备 MySQL UPDATE 语句,其中包含字符串中的变量【英文标题】:PHP Prepared MySQL UPDATE Statement with Variable inside of a string 【发布时间】:2020-12-12 00:58:52 【问题描述】:我试图在更新查询的字符串中包含一个变量,但似乎遇到了问题。我刚刚更新我所有的旧网站以使用准备好的语句,所以我对它们还不是很熟悉。我需要做什么才能在查询中连接字符串和变量。
$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】:您想要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
【讨论】:
您也可以在 php 中组合单个变量然后绑定它,例如"filename" => "_tree$insertid$filename"
可以进入 execute()
调用。以上是关于PHP 准备 MySQL UPDATE 语句,其中包含字符串中的变量的主要内容,如果未能解决你的问题,请参考以下文章