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 语句,其中包含字符串中的变量的主要内容,如果未能解决你的问题,请参考以下文章

PHP MySQL Update 之 Update

在 PHP 中创建准备好的语句

调用 MySQL 函数时 PHP 准备语句失败

如何在 php 中创建安全的 mysql 准备语句?

运行准备好的语句 (MySQL/PHP)

MySQL准备好的语句在PHP中抛出错误