Php 未捕获错误:对字符串调用成员函数execute()

Php 未捕获错误:对字符串调用成员函数execute(),php,Php,我正在尝试使用PDO从mysqli转录我的代码 我正在做一个简单的从低到高,反之亦然的价格过滤器 在内部,我有一个带有单选复选按钮的表单,通过将方法发送到search.php文件中 我在search.php中尝试的验证发生在: $sql = "SELECT * FROM products"; $cat_id = (($_POST['cat']!= '')?sanitize($_POST['cat']):''); if($cat_id == ''){

我正在尝试使用PDO从mysqli转录我的代码

我正在做一个简单的从低到高,反之亦然的价格过滤器

内部,我有一个带有单选复选按钮的表单,通过
方法发送到search.php文件中

我在search.php中尝试的验证发生在:

  $sql =  "SELECT * FROM products";
      $cat_id = (($_POST['cat']!= '')?sanitize($_POST['cat']):'');
      if($cat_id == ''){
        $sql .= ' WHERE deleted = 0';
      }else{
        $sql .= "WHERE categories = '{$cat_id}' AND DELETED = 0";
      }
      $price_sort =(($_POST['price_sort'] != '')?sanitize($_POST['price_sort']):'');
      $min_price =(($_POST['min_price'] != '')?sanitize($_POST['min_price']):'');
      $max_price =(($_POST['max_price'] != '')?sanitize($_POST['max_price']):'');

      if($min_price != ''){
        $sql .= " AND price >= '{$min_price}'";
      }

      if($max_price != ''){
        $sql .= " AND price <= '{$max_price}'";
      }

      if($price_sort == 'low'){
        $sql .= " ORDER BY price";
      }

      if($price_sort == 'high'){
        $sql .= "ORDER BY price DESC";
      }
      $sql->execute();

string
是PHP中的一种基本类型,根本不公开任何方法,因此对
string
调用
execute()
会混淆PHP,因为您试图将其作为类实例使用

您似乎也在尝试执行SQL查询,这意味着您需要使用刚刚在
$SQL
中构建的SQL查询,并使用数据库驱动程序执行它

对于PDO,其可能如下所示:

$sql = "SELECT * FROM products";
// ...
$pdo->query($sql);

…请仔细阅读错误消息。它似乎在告诉你什么?你看到你在哪里调用
execute()
?你看到你在调用什么类型的对象了吗?我把查询关联到一个字符串,这样做是错误的吗?嗯,通过把字符串粘在一起来构建SQL查询通常是不安全的。您可能对SQL注入持开放态度(我不知道
sanitize()
做了什么,但这几乎肯定是错误的),但这不是问题所在。您正在尝试使用什么数据库API?我在任何地方都看不到任何连接信息或适当的函数调用。无法执行字符串;通常,您会将一个字符串传递到数据库连接对象上的执行函数中。sanitize是一个希望能够转义html实体的函数,我使用的是PDO,我使用的不是oop,而是原始php。这段代码在mysqli中运行良好,但我不确定如何使用pdo处理这一问题。我的连接是在config.phpDon内建立的,不能转义HTML实体。那没有任何用处。为了防止SQL注入,您需要使用参数化查询(即准备语句,将参数绑定到语句,然后执行它们,请参见)。如果使用PDO,则需要PDO连接对象。有吗?
$sql = "SELECT * FROM products";
// ...
$pdo->query($sql);