php中的奇怪问题,其中sql命令中包含%

时间:2019-01-27 22:23:31

标签: php sql

我有一个php文件,该文件获取一些参数以将其传递给sql命令。第一个是这样:

if (isset ($_GET['pedio'])){
   $pedio = " ` pedio ` LIKE '%" . $_GET['pedio'] . "%'";
}

使用此表单,代码未运行。问题是 ”%'”。如果我从“%'”中删除%,则代码正在运行,但不是我想用作表达式的代码。我尝试过:

$pedio = " `pedio` LIKE '%" . $_GET['pedio'] . chr(37) . "'";

但是没有帮助。如果我将chr(37)更改为chr(38),则代码正在运行,但是表达式末尾有&,而不是%。怎么了有解决方案吗?

编辑: 我的代码:

<?php
if (isset($_GET['pedio'])) {
    $pedio = " pedio LIKE '%$pedio%'";
}

if (isset($_GET['instit_type'])) {
    if ($pedio != "") {
        $instit_type = " AND";
    }

    $instit_type.= " instit_type = '" . $_GET['instit_type'] . "'";
}

if (isset($_GET['city'])) {
    if ($pedio != "" || $instit_type != "") {
        $city = " AND";
    }

    $city.= " city = '" . $_GET['city'] . "'";
}

echo "<p>" . $pedio . " , " . $instit_type . " , " . $city . "</p>";

// Create connection

$conn = new mysqli($servername, $username, $password, $dbname);
$conn->set_charset("utf8");

// Check connection

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$sql = "SELECT * FROM schools WHERE"; . $pedio;

// . $instit_type . $city . $category;
// echo $sql; $result = $conn->query($sql);

此修改也不起作用:

if (isset ($_GET['pedio']))
{
    switch ($_GET['pedio']){
        case 1:
        $pedio = " `pedio` LIKE '%1%'";
        case 2:
        $pedio = " `pedio` LIKE '%2%'";
        case 3:
        $pedio = " `pedio` LIKE '%3%'";
        case 4:
        $pedio = " `pedio` LIKE '%4%'";
    }
}

现在,我注意到了

$pedio = " `pedio` = '%1%'";

代码正在正常运行,但是sql命令错误并且没有返回结果。用=代替LIKE消除了我的问题?这怎么可能?反正怎么回事?

3 个答案:

答案 0 :(得分:1)

值得一问。

如果基本查询以$sql = "SELECT * FROM schools WHERE";开头,则需要通过在. src之前添加=来操纵当前变量。

完整代码示例

注意:此示例不安全!请改用prepared statements

<?php
$baseSql = "SELECT * FROM school";

if(isset($_GET['pedio'])) {
    $baseSql .= "WHERE pedio LIKE '%" . $_GET['pedio'] . "%'";
}
?>

答案 1 :(得分:0)

您可以尝试以下操作:

$variable = $_GET['pedio'];
$pedio = "pedio LIKE '%$variable%'";

答案 2 :(得分:0)

总共,我发现这是服务器问题。我需要找到一种解决方法,因为提供程序不能做很多事情。