mysql table 中没有存储斜线

No slashes stored in mysql table

这是我的代码的简化版本。我想要实现的是我想将图像路径插入数据库 table。我使用了常量 DIRECTORY_SEPERATOR,我也在使用 PDO。

$tmp    = $_FILES['file1']['tmp_name'];
$name   = $_FILES['file1']['name'];
$path   = getcwd() . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . $name;



$success = move_uploaded_file($tmp, $path);


if($success){
    $query = "INSERT INTO phptbl (Name, Photo) VALUES ('name', '$path')";
    $db->exec($query);
}else{
    echo 'Something went wrong!';
}

数据将被插入到 table 中,没有目录分隔。

请指教

使用准备好的查询,它将保护您免受斜线、引号和其他特殊字符的问题

下一步试试:

$tmp    = $_FILES['file1']['tmp_name'];
$name   = $_FILES['file1']['name'];
$path   = getcwd() . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . $name;



$success = move_uploaded_file($tmp, $path);


if($success){
    $query = "INSERT INTO phptbl (Name, Photo) VALUES ('name', :path)";
    $stmt = $db->prepare();
    $stmt->execute([':path' => $path]);
}else{
    echo 'Something went wrong!';
}

如果 DIRECTORY_SEPERATOR 在您的系统上是 \,则您正在创建一个带反斜杠的字符串。反斜杠是许多语言中的转义字符,包括 SQL。数据库会将 \ 解释为元字符。要正确存储任何和所有任意值,您需要正确地转义该值(到 \),或者更好的是,准备并绑定 查询:

$stmt = $db->prepare("INSERT INTO phptbl (Name, Photo) VALUES ('name', ?)";
$stmt->execute([$path]);

这将正确地保留特殊字符而不对其进行解释。