dpowhyh70416 2018-02-12 13:52
浏览 66
已采纳

我可以在SQL语句中绑定运算符吗?

Fatal error Uncaught exception: 'PDOException'

Message: 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''>=' '1000'' at line 3'

<select name="operator1" class="form-control mr-sm-2">
                <option value="None">None</option>
                <option value=">="> >= </option>
                <option value="<="> <= </option>
            </select>

$user = User::searchUserBuiltQuery($_POST);
        var_dump($user);

    public static function searchUserBuiltQuery($data)
{
    $operator1  = $data['operator1'];
    $amount     = $data['amount'];
    $operator2  = $data['operator2'];
    $date       = $data['registration_date'];

    $sql = 'SELECT * from users 
            ';

    $db = static::getDB();

    if($operator1 != "None"){

        $sql .= "
 WHERE userBalance :operator1 :amount";

    }
    if($operator2 != "None"){

        $sql .= "
 WHERE user_registration_date :operator2 :date";

    }
    if($operator1 != "None" && $operator2 != "None"){

        $sql = "
 WHERE userBalance :operator1 :amount 
                    AND user_registration_date :operator2 :date";

    }

    $stmt = $db->prepare($sql);

    if($operator1 != "None"){

        $stmt->bindValue(':operator1', $operator1, PDO::PARAM_STR);
        $stmt->bindValue(':amount', $amount, PDO::PARAM_STR);
    }
    if($operator2 != "None"){

        $stmt->bindValue(':operator2', $operator2, PDO::PARAM_STR);
        $stmt->bindValue(':date', $date, PDO::PARAM_STR);
    }
    if($operator1 != "None" && $operator2 != "None"){

        $stmt->bindValue(':operator1', $operator1, PDO::PARAM_STR);
        $stmt->bindValue(':amount', $amount, PDO::PARAM_STR);
        $stmt->bindValue(':operator2', $operator2, PDO::PARAM_STR);
        $stmt->bindValue(':date', $date, PDO::PARAM_STR);
    }

    $stmt->setFetchMode(PDO::FETCH_CLASS, get_called_class());

    $stmt->execute();

    return $stmt->fetchAll();

}
  • 写回答

1条回答 默认 最新

  • duanning9110 2018-02-12 14:05
    关注

    $sql .= " WHERE userBalance :operator1 :amount";

    You cannot bind an operator, as the DB engine needs it to create the statement.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?