2016-05-10 45 views
1

我试图让PHP来简化我的数据库连接,以便我可以修改代码的一个区域并影响整个程序。以下是我有:调用一个非对象的成员函数query()在

PAGE:rdpa.php(A模块页面

/**************************/ 
/* Create System Settings */ 
/**************************/ 

/* Database Connection Settings */ 
$_SESSION['servername']  = "localhost"; 
$_SESSION['mysql_username'] = "username"; 
$_SESSION['mysql_password'] = "password"; 
$_SESSION['dbname']   = "mydb"; 

//Turn on Error Report. True = On/False = Off 
//ErrorReporting(false); 

//Display Error.kfkg 
function ErrorReporting($ErrOn){ 
if ($ErrOn == true) { 
    //Show Error 
    ini_set('display_errors',1); 
    ini_set('display_startup_errors',1); 
    error_reporting(-1); 
} 
} 

/************************************** 
Open Database Connection Function. 
***************************************/ 

class db_class { 

function db_conn() { 

    global $conn; 
    global $mysqli; 
    $conn = new mysqli($_SESSION['servername'], $_SESSION['mysql_username'], $_SESSION['mysql_password'], $_SESSION['dbname']); 

    // Check connection 
    if ($conn->connect_error) { 
     die("Connection failed: " . $conn->connect_error); 

    // Test if connection succeeded 
    if(mysqli_connect_errno()) { 
     die("Database connection failed: " . 
      mysqli_connect_error() . 
      " (" . mysqli_connect_errno() . ")" 
     ); 
     } 

    //return db_conn; 
    } 

} 

PAGE:testdb3.php

<?php 

//Included file. 
include 'modules/rdpa.php'; 

error_reporting(-1); 
ini_set('display_errors', 'On'); 

//Access our class. 
$db_Class = new db_Class; 
$conn = ($db_Class->db_conn()); 

//connect to the database. 
$sql = "SELECT id, region FROM tbl_region;"; 
$result = $conn->query($sql); 

if ($result->num_rows > 0) { 
    // output data of each row 
    while($row = $result->fetch_assoc()) { 

     echo '<td width="1"><label for="delete"> 
<input type="radio" name="region" id="region" value="'.$row["id"].'"> 
</label></td>'; 

     echo '<td align="left" valign="top"><p>'.$row["region"].'</p></td></tr>'; 
    } 
} 


?> 

当我运行testdb3.php我得到以下错误:

致命错误:调用第15行的C:\ websites \ rdpa \ testdb3.php中的非对象上的成员函数query()

这是第15行:

//connect to the database. 
$result = $conn->query($sql); 

一些能告诉我什么,我做错了什么?

+0

试一试 注释这两行$ db_Class = new db_Class; $ conn =($ db_Class-> db_conn()); – JYoThI

+0

请返回您的连接对象您的问题将解决从db_conn函数返回您的$ conn变量 –

+0

它返回以下错误:注意:未定义的变量:第15行testdb3.php中的conn致命错误:调用成员函数query()on第15行的testdb3.php中的非对象 –

回答

1

更改rdpa.php页面

class db_class { 

    function db_conn() { 

     global $conn; 
     global $mysqli; 
     $conn = new mysqli($_SESSION['servername'], $_SESSION['mysql_username'], $_SESSION['mysql_password'], $_SESSION['dbname']); 

     // Check connection 
     if ($conn->connect_error) { 
      die("Connection failed: " . $conn->connect_error); 

      // Test if connection succeeded 
      if (mysqli_connect_errno()) { 
       die("Database connection failed: " . 
           mysqli_connect_error() . 
           " (" . mysqli_connect_errno() . ")" 
       ); 
      } 
     } 
     return $conn;  //return connection string 
    } 

}   //this is missing in your code 

你需要从函数返回的连接字符串。现在你在if循环中返回$conn,即如果发生错误,则返回连接,这就是你正在做的事情。

请使用一些IDE来编码。 } for class在您的代码中缺失

+0

谢谢你做到了。简单的事情有时可以使生活soooooo HARD:/谢谢! –

+0

你最欢迎:)很高兴它可以帮助你:) – Apb

0

我想你在查询结束后用分号问题。

$sql = "SELECT id, region FROM tbl_region;"; your current query please replace with below query which i have given below. may it helps you. 
$sql = "SELECT id, region FROM tbl_region"; 

试试上面的查询它会解决你的问题。并且还替换你的函数代码你还没有返回conn对象。用下面的代码替换。你的问题将解决。

function db_conn() { 

    global $conn; 
    global $mysqli; 
    $conn = new mysqli($_SESSION['servername'], $_SESSION['mysql_username'], $_SESSION['mysql_password'], $_SESSION['dbname']); 

    // Check connection 
    if ($conn->connect_error) { 
     die("Connection failed: " . $conn->connect_error); 

    // Test if connection succeeded 
    if(mysqli_connect_errno()) { 
     die("Database connection failed: " . 
      mysqli_connect_error() . 
      " (" . mysqli_connect_errno() . ")" 
     ); 
     } 


    } 
return $conn; 
} 
+0

你好Dinesh,我试图删除内部; ($ sql =“SELECT id,region FROM tbl_region”;)但它仍然抛出该错误。致命错误:调用第15行非对象的成员函数query()。 –

+0

我替换了上面的函数,但现在我在页面上没有任何错误或没有任何错误。只是一个空白页面。 –

相关问题