简体   繁体   English

用变量替换字符串时,SQL请求不返回任何内容

[英]SQL request not returning anything when replacing a string by a variable

I'm trying to setup a simple function to update the path of subfolders when the main folder is renamed. 我正在尝试设置一个简单的函数来在重命名主文件夹时更新子文件夹的路径。

Here is my code : 这是我的代码:

case 'rename':

$dirpath = rtrim(preg_replace('~/+~', '/', (str_replace('\\', '/', $_POST['old-dirpath']))), '/');
$new_dirpath = rtrim(preg_replace('~/+~', '/', (str_replace('\\', '/', $_POST['new-dirpath']))), '/');

$sql = "
    UPDATE privatedir SET
    dirpath = '{$new_dirpath}'
    WHERE dirpath = '{$dirpath}'
    ";

    $db->execute($sql);


$rs = $db->query("SELECT * FROM privatedir WHERE `dirpath` LIKE '%.$dirpath.%'");

$folders = $db->fetchAll($rs);
print_r ($folders); print_r($dirpath); die;
foreach ($folders as $folder){
    echo $folder['dirpath']; die;
    $folder_new_dirpath = str_replace($dirpath, $new_dirpath, $folder['dirpath']);

    $sql = "
        UPDATE privatedir SET
        dirpath = '{$new_dirpath}'
        WHERE dirpath = '{$folder['dirpath']}'
        ";

        $db->execute($sql);
}

My problem concerns the line $rs = $db->query("SELECT * FROM privatedir WHERE dirpath LIKE '%.$dirpath.%'"); 我的问题涉及到$rs = $db->query("SELECT * FROM privatedir WHERE dirpath LIKE '%.$dirpath.%'"); even though there are matching results in my database it won't return me anything, if I print_r $folders it just prints me an empty array. 即使我的数据库中有匹配的结果,它也不会返回任何信息,如果我使用print_r $folders它只会向我输出一个空数组。

However if I replace .$dirpath. 但是,如果我替换.$dirpath. by the string directly (for example C:/wamp/www/gg/ftp/repository/folder1 ) it will return me the matching results and print_r $folders will print me the corresponding arrays. 直接通过字符串(例如C:/wamp/www/gg/ftp/repository/folder1 ),它将返回匹配的结果给我,而print_r $folders将打印出对应的数组。

What am I doing wrong ? 我究竟做错了什么 ?

像thi这样将变量放在引号中

    $rs = $db->query("SELECT * FROM privatedir WHERE `dirpath` LIKE '%'".$dirpath."'%'");

Thing is that you don't need the dots around, because you're not concatenating the string. 事实是,您不需要周围的圆点,因为您不需要串联字符串。

This should work: 这应该工作:

$rs = $db->query("SELECT * FROM privatedir WHERE `dirpath` LIKE '%$dirpath%'");

You can also do 你也可以

$rs = $db->query("SELECT * FROM privatedir WHERE `dirpath` LIKE '%".$dirpath."%'");

if you like it better. 如果您更喜欢它。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM