Php 调用未定义的方法语句::query()
我正在学习PDO,我面临着一个我一无所知的问题。所以,我有一个类别表吉他,鼓等,另一个产品表有每种类型的产品。我正在学习MVC,并试图列出某一特定类别的所有产品 这是我为控制器准备的,但仍然不完整:Php 调用未定义的方法语句::query(),php,pdo,Php,Pdo,我正在学习PDO,我面临着一个我一无所知的问题。所以,我有一个类别表吉他,鼓等,另一个产品表有每种类型的产品。我正在学习MVC,并试图列出某一特定类别的所有产品 这是我为控制器准备的,但仍然不完整: <?php include './model/database.php'; include './model/category.php'; include './model/product.php'; // What is the default action if(isset($_POST[
<?php
include './model/database.php';
include './model/category.php';
include './model/product.php';
// What is the default action
if(isset($_POST['action'])){
$action=$_POST['action'];
}elseif(isset($_GET['action'])){
$action=$_GET['action'];
}
else {
$action='product_list'; // Default Action
}
if($action==='product_list'){
if(isset($_GET['category_id'])){
$category_id=$_GET('category_id');
} else {
$category_id=1;
}
}
$category_name=get_category_name($category_id);
$catagories=get_categories();
$products= get_product_by_category($category_id);
include('product_display.php');
?>
这是my categories.php文件:
<?php
function get_categories(){
global $db;
$query="SELECT * FROM categories ORDER BY categoryID";
$categories=$db->query($query); //line 5
return $categories;
}
function get_category_name($category_id){
global $db;
$query="SELECT categoryName FROM categories
WHERE categoryID=$category_id";
$db=$db->query($query);
$category=$db->fetch();
$category_name=$category['categoryName'];
return $category_name;
}
?>
这是我的database.php文件:
<?php
$dsn='mysql:host=localhost;dbname=my_guitar_shop1';
$user='mgs_user';
$password='pa55word';
try {
$db= new PDO($dsn, $user, $password);
} catch (Exception $ex) {
$error_message=$ex->getMessage();
include 'database_error.php';
exit();
}
?>
这给了我一个错误:
在第5行的C:\xampp\htdocs\mvcfirst\model\category.php中调用未定义的方法PDOStatement::query
这就是为什么会有这样的共识。在database.php文件中,将$db变量设置为PDO对象: 然后在categories.php文件中,使用PDOStatement对象覆盖$db变量: 查询返回一个PDOStatement对象,该对象没有查询方法。这就是你所得到的错误 另一方面,您需要使用带有绑定参数的预处理语句,否则代码容易受到SQL注入攻击。您还可以使用PDOStatement::fetchColumn选择单个列:
function get_category_name($category_id){
global $db; // Yuck!
$query="SELECT categoryName FROM categories
WHERE categoryID = ?";
$stmt=$db->prepare($query);
$stmt->execute([$category_id]);
return $stmt->fetchColumn();
}
我不太明白你的意思,明白了。非常感谢迈克,你让我成为一个快乐的人。稍后我将研究SQL注入。我有点不知所措,有很多东西需要学习和记住。很高兴我能帮上忙!
$db=$db->query($query);
function get_category_name($category_id){
global $db; // Yuck!
$query="SELECT categoryName FROM categories
WHERE categoryID = ?";
$stmt=$db->prepare($query);
$stmt->execute([$category_id]);
return $stmt->fetchColumn();
}