我正在尝试在执行删除命令后“删除”数据库条目中的部分字符串。
假设一个 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/