2016-11-21 105 views
1

我试图在删除命令后删除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为文件名场,分隔由“ - ”,当其装'爆炸'成一个数组。它允许我避开不限数量的附件。也许不是做事的最佳方式?

+1

“也许不是最好的做事方式?”你是对的,这不是做事的最佳方式。你应该规范化表格。 – bassxzero

回答

1

如果您使用$id$thefile,而不是变量插值参数,你就不必担心逃逸字符,这可能是SQL的格式不正确,当你尝试只使用一个SQL里面的$thefile值的原因串。

+0

谢谢你Niloct - 我不觉得愚蠢,因为没有尝试这一点,它的工作原理。我为什么第一个人工作,第二个人没有工作,我很挂断。差异我猜是第一个只处理数字,而另一个与字母也是。无论如何,现在似乎工作。万分感谢 – Matt

+0

不错!祝你有个好的一天。 – Niloct