Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 用变量替换字符串时SQL请求不返回任何内容_Php_Mysql_Sql - Fatal编程技术网

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

Php 用变量替换字符串时SQL请求不返回任何内容,php,mysql,sql,Php,Mysql,Sql,我正在尝试设置一个简单的函数,以便在重命名主文件夹时更新子文件夹的路径 这是我的密码: case 'rename': $dirpath = rtrim(preg_replace('~/+~', '/', (str_replace('\\', '/', $_POST['old-dirpath']))), '/'); $new_dirpath = rtrim(preg_replace('~/+~', '/', (str_replace('\\', '/', $_POST['new-dirpath'

我正在尝试设置一个简单的函数,以便在重命名主文件夹时更新子文件夹的路径

这是我的密码:

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);
}
我的问题涉及行
$rs=$db->query(“SELECT*FROM privatedir,其中
dirpath
类似“%.dirpath.%”)
即使在我的数据库中有匹配的结果,它也不会返回任何内容,如果我
打印r$folders
它只会打印一个空数组

但是,如果我直接用字符串替换
$dirpath.
(例如
C:/wamp/www/gg/ftp/repository/folder1
),它将返回匹配的结果,
print\r$folders
将向我打印相应的数组


我做错了什么?

问题是你不需要点,因为你没有连接字符串

这应该起作用:

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

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

如果你更喜欢的话。

问题是你不需要周围的点,因为你没有连接字符串

这应该起作用:

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

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

如果你更喜欢的话。

把变量放在像这样的引号里

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

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

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

尝试将
'%.$dirpath.%'
更改为
'%{$dirpath}%'
尝试将
'%.$dirpath.%'
更改为
'%{$dirpath}%'
好的!谢谢,我不知道为什么我确信这些点是必要的,谢谢你澄清了第二个例子中的点是必要的,在第一个例子中,字符串是按原样放的,变量是正确的!谢谢,我不知道为什么我确信点是必要的,谢谢你澄清点是必要的,在第二个例子中,在第一个例子中,字符串是按原样放的,带有变量