我试图在删除命令后删除DB条目中字符串的一部分。SQL/PHP - REPLACE语句不按预期工作
说一个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' 和查询中的所有输入是 '字符串'
我不能包装我的头为什么PDF的作品,但speaker_img没有。
该问题必须在REPLACE(speaker_img, $thefile, '')
,因为如果我用简单的= ''
代替它,查询将执行正常并清除整个单元格,如果匹配。
这是我如何定义2输入变量:
$thefile = (string)basename($row['filename'], ".png");
$like_filename_string = "%".$thefile."%";
对于好奇,为什么我保存这样的信息:这里只有1为文件名场,分隔由“ - ”,当其装'爆炸'成一个数组。它允许我避开不限数量的附件。也许不是做事的最佳方式?
“也许不是最好的做事方式?”你是对的,这不是做事的最佳方式。你应该规范化表格。 – bassxzero