php - SQL/PHP - REPLACE 语句未按预期工作

标签 php mysql

我正在尝试在执行删除命令后“删除”数据库条目中的部分字符串。

假设一个 PDF 文件被删除,我想通过用 '' 替换它来删除它的引用(但保留其他引用)。这工作正常,但现在我也想用另一列来做,完全相同的设置似乎不起作用,我不明白为什么。

这个有效:

$stmt_2 = $db->prepare("UPDATE data_videothek SET pdfAttachment = REPLACE(pdfAttachment, $id, '') WHERE pdfAttachment LIKE ?");
$stmt_2->execute(array( $like_id_string ));

这不是:

$stmt_2 = $db->prepare("UPDATE data_videothek SET speaker_img = REPLACE(speaker_img, $thefile, '' ) WHERE speaker_img LIKE ?");
$stmt_2->execute(array(  $like_filename_string ));

两列都定义为“varchar”,查询中的所有输入都是“string”

我无法理解为什么 pdf 有效,但 speaker_img 却无效。

问题一定在 REPLACE(speaker_img, $thefile, '' ) 中,因为如果我用简单的 = '' 替换它,查询将执行正常并清除如果匹配则整个单元格。

这就是我定义 2 个输入变量的方式:

$thefile = (string)basename($row['filename'], ".png");
$like_filename_string = "%".$thefile."%";

出于好奇,我为什么要这样保存信息:文件名只有 1 个字段,由“-”分隔,加载时会“分解”到数组中。它允许我拥有数量不限的附件。也许不是最好的做事方式?

最佳答案

如果你为 $id$thefile 使用参数而不是变量插值,你就不需要担心转义字符,这可能是 sql 的原因当您尝试在 sql 字符串中使用 $thefile 的值时格式错误。

关于php - SQL/PHP - REPLACE 语句未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40725309/

相关文章:

mysql - User.all 在本地需要 5-10 分钟。请求超时以遍历每个

php - 我应该为类似的用法创建不同的 SQL 表,还是只创建一个带有参数的表?

javascript - php 代码未重定向到 ajax 调用

javascript - 如何在angularjs中获取输入类型文件的值?

php - 在php中回显html是否可能会导致html输出错误?

php - Hostgator远程访问本地php文件中的数据库

php - jQGrid 与 Oracle 数据库

php - 为什么我的 IF 语句结果显示,但我的 ELSE 语句也运行?

mysql - SELECT 临时表并针对重复值设置 NULL

mysql - SQL LEFT JOIN/INNER JOIN 不同的结果