【问题标题】:OO and mysqli in PHPPHP 中的 OO 和 mysqli
【发布时间】:2015-04-23 02:10:35
【问题描述】:

我已经这样定义了我的连接文件

文件名 = connection.php

<?php
$host = "localhost";
$database = "projectp_peas";
$usr= "projectp_admin";
$pass = "9613341694";
$conn = mysqli_connect($host, $usr, $pass) or die (mysqli_error($conn));
?>

我的连接正常。 ()

现在我的第一堂课: 文件名product.php

<?php
class Product{

public $PRODUCT;
public $SHORT_DESC;
public $LONG_DESC;

public function showProduct($id){
include_once("conection.php");

mysqli_select_db($conn, $database);
$products = "SELECT * FROM PRODUCTS WHERE ID = '$id' ";
$rs_products = mysqli_query($conn, $products) or die (mysqli_error($conn));
$product = mysqli_fetch_assoc($rs_products);

echo "<h3 style=\"font-size:3em; color:#BBBBBB;\"> ";
echo $product['PRODUCT'] ."</h3>"; 
echo "<h5> ";
echo $product['SHORT_DESC'] ."</h5>"; 

echo $product['LONG_DESC']; 
}

}
?>

现在我的index.php 文件

<div class ="px_70">
<?php
 require_once('../script/product.php');
 $product = new Product;
 $product->showProduct(1);
?>
</div>

到目前为止,我的查询运行良好。

但我的问题从另一个类开始。另一个类是这样的:

文件名:clients.php

<?php
class User{
public function TopMenu(){
include_once("conection.php");
session_start();

if(isset($_SESSION['EMAIL'])){
$MAIL = $_SESSION['EMAIL'];

mysqli_select_db($conn, $database);
$username= "SELECT * FROM CLIENTS WHERE EMAIL = '$MAIL' ";
$USERNAME_RS = mysqli_query($conn, $username) or die(mysqli_error($conn));
$USR = mysqli_fetch_assoc($USERNAME_RS);

if(mysqli_num_rows($USERNAME_RS)>0){
echo $USR['C_NAME'] . " | <a href=\"../global/logout.php\">Log out </a> | <a href=\"UserPapers.php\"> Papers &nbsp; &nbsp;</a>" ;
}

else{
echo " <a href=\"../login.php\">Login</a> | <a href=\"../Register.php\">Register &nbsp; &nbsp;</a>" ;
}
}

else{
echo " <a href=\"../login.php\">Login</a> | <a href=\"../Register.php\">Register &nbsp; &nbsp;</a>" ;
}
}
}
?>

再次在index.php 文件中:

<div class="tm">
<?php
include_once('../script/clients.php');
$top = new User;
$top->TopMenu();
?>
</div>

为什么会出现以下错误?

Warning: mysqli_select_db() expects parameter 1 to be mysqli, null given in /home/projectp/public_html/script/product.php on line 11

Warning: mysqli_query() expects parameter 1 to be mysqli, null given in /home/projectp/public_html/script/product.php on line 13

Warning: mysqli_error() expects parameter 1 to be mysqli, null given in /home/projectp/public_html/script/product.php on line 13

文件中的函数 TopMenu() 不应导致任何错误。因为这个函数工作正常,当我删除 Product 类时。 谁能告诉我,我在哪里出错?我对 php OO 和 mysqli 很陌生。

【问题讨论】:

  • 删除密码是个好主意!或者从一开始就永远不要发布密码。
  • include_**once**...
  • 不要将您的数据库创建/连接移动到完全不相关的类/方法中。如果您需要为 DB 层创建抽象,则创建一个 DB 类。这类似于购买手机。你不会买几个,所以你可以在你家的每个房间都有一部手机。你会买一个随身携带。

标签: php mysql oop mysqli


【解决方案1】:

您没有在函数中定义$conn。就这样。

您可以将$conn 定义为您的类的属性。

class Product {
    private $connection;
    public function __construct($connection) {
        $this->connection = $connection;
    } 
    public function showProduct($id) {
        $database = ... ;
        mysqli_select_db($this->connection, $database);

【讨论】:

    【解决方案2】:

    我认为你应该在这里将include_once 更改为include

    class Product{
    
    public $PRODUCT;
    public $SHORT_DESC;
    public $LONG_DESC;
    
    public function showProduct($id){
    include("conection.php");
    

    这里:

    class User{
    public function TopMenu(){
    include("conection.php");
    

    【讨论】:

    • 这给了我Fatal error: Cannot redeclare class Db... 我用谷歌搜索发现require_once 是解决方案。但在我的情况下,require_once 给了我同样的先前错误..
    • 在你的情况下——你不能使用require_once,或者include_once你开发的方式你必须使用include,或者如果你想重新设计你的应用程序,我会设置另一个答案,如果您仍然需要解决方案,请告诉我
    • 是的,我需要解决方案。看了很多论坛,试过各种方法,还是没有结果。
    • 那么当我对include 进行更改时,您有什么错误消息?
    • 您发布的conection.php 中没有class DB,我提供的代码中也没有class DB。所以这条消息与我的回答无关。显示您的conection.php 的完整比赛或只关注一个答案:我的或其他任何人,但同时只有一个。
    猜你喜欢
    • 2018-12-30
    • 2011-12-14
    • 1970-01-01
    • 2016-10-21
    • 2012-08-09
    • 2011-04-25
    • 2016-06-15
    • 2021-02-11
    • 2011-02-22
    相关资源
    最近更新 更多