包含反斜杠的查询没有给出任何结果

时间:2017-04-10 21:19:28

标签: php mysql

我有这个问题:SELECT file, path, type FROM testDB WHERE path=?。 准备好的语句获取一个包含反斜杠的字符串,如下所示: C:\ Users \ Sven \ Desktop

虽然我在MySQL数据库中存储了这个C:\ Users \ Sven \ Desktop,但这并没有返回任何内容。为了在phpMyAdmin中查询语句,我必须添加一个额外的反斜杠,这给了我想要的结果。我怀疑这是问题,因为我的预准备语句没有返回任何内容所以我将查询直接更改为SELECT file, path, type FROM testDB WHERE path = 'C:\Users\Sven\Desktop'SELECT file, path, type FROM testDB WHERE path = 'C:\\Users\\Sven\\Desktop',但仍然没有返回任何内容。什么可能是错的?

重要的事情:

if (isset($_GET["path"])) {
    $sql1 = "SELECT `file`, `path`, `type` FROM testDB WHERE path=?";
    $stmt = $link->prepare($sql1);
    $stmt->bind_param("s", $_GET["path"]);
    $result = $stmt->execute();
} else {
    $sql = "SELECT * FROM testDB";
    $result = $link->query($sql);
}
if ($result) {
    if ($result->num_rows) {

GET正在获得$row['path']

2 个答案:

答案 0 :(得分:0)

尝试使用addslashesrawurldecode

$stmt->bind_param("s", addslashes(rawurldecode($_GET['path']));

rawurldecode将从$_GET获取路径并返回一个字符串,其中带有百分号(%)的序列后跟两个十六进制数字已替换为文字字符。这是必需的,因为路径可能包含可能转换为%20的空格,并且必须转换回来进行搜索。 (在您的具体情况下可能不需要,但在更多情况下它会有用)。

addslashes也是必需的,它会在需要转义的字符之前返回带反斜杠的字符串。这些字符是单引号('),双引号(“),反斜杠()。

答案 1 :(得分:-1)

在数据库,表格菜单,我插入的字段内容中:

C:\Users\Sven\Desktop

我只是这样尝试:

<?php
$pdo = new PDO('mysql:host=localhost;dbname=kartedium_cmslight', "root", "");
$stmt = $pdo->prepare('SELECT * FROM menu WHERE content = ?');
$id="C:\\Users\\Sven\\Desktop";
$stmt->execute([$id]);
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    echo $row['content'];
}
?>

结果还可以:

C:\Users\Sven\Desktop