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