簡體   English   中英

PHP 應用程序上的內部服務器錯誤正在調用 function 調用 MySQL 數據庫

[英]Internal Server Error on a PHP app that is calling a function that calls MySQL database

基本上我正在構建一個 MVC 應用程序。 在 Model 中,dbFunctions.php 是這個代碼:

<?php
require("config.php");
require("dbconnection.php");

class dbFunctions
{
    // setting up the object to connect to the Database
    function __construct() 
    {
        $dbConnect = new dbConnection(); 
    }

    public function insertPortfolioAdminData($value='')
    {
        # code...
    }

    public function login($value='')
    {
        # code...
    }

    public function logout($value='')
    {
        # code...
    }

    public function dbStoreContactForm($value='')
    {
        # code...
    }

    // returns a query with a collection of database objects for the portfolio
    public function fetchAllPortfolioItems()
    {
        $fetchAllPortfolioItemsReturnQry = mysql_query("SELECT description FROM PortfolioItems")  or die ('Error: '.mysql_error ()); 

        if($fetchAllPortfolioItemsReturnQry){
            return $fetchAllPortfolioItemsReturnQry; 
        }
    }

    public function fetchSinglePortfolioItems($primaryKey='')
    {
        # code...
    }

}
?> 

dbConnection.php

<?php 

require("config.php"); 

class dbConnection {

    private $databaseConnection;    

    public function dbConnection(){
        $databaseConnection = mysql_connect(dbHostName,dbUserName,dbPassword) or die(mysql_error());
        mysql_select_db(dbDatabaseName) or die(mysql_error());
    }

    public function closeConnection(){
        mysql_close($databaseConnection);
    }

}

?>

controller:

<?php 
// Calling the class to do the work on database 
require("./model/dbfunctions.php"); 

$dbMethods = new dbFunctions(); 

while($row = mysql_fetch_array($dbMethods->fetchAllPortfolioItems()))
{
    $pageContent = $row["description"];
}

// calling the template
require("./views/page_12.php"); 

?> 

這是錯誤:

內部服務器錯誤

服務器遇到內部錯誤或配置錯誤,無法完成您的請求。

請聯系服務器管理員 webmaster@mvcportfolio.adambourg.com 並告知他們錯誤發生的時間,以及您所做的任何可能導致錯誤的事情。

服務器錯誤日志中可能提供有關此錯誤的更多信息。

此外,在嘗試使用 ErrorDocument 處理請求時遇到 404 Not Found 錯誤。

基本上我正在嘗試在 model 中完成我的所有數據庫工作,然后通過 model 將其傳遞給 output 它的視圖。

我看到一些可能導致錯誤的問題:

1 - 您正在對“config.php”使用require ,但您確實應該使用require_once 無需多次加載。

// Replace the require('config.php') with:
require_once('config.php');

2 - 您是否在“config.php”中定義常量? dbConnection::dbConnection() function 正在尋找名為dbHostNamedbUserNamedbPassworddbDatabaseName的常量。 確保您的“config.php”正在定義常量。

3 - dbFunctions.php 中的 while($row = mysql_fetch_array($ dbFunctions.php while($row = mysql_fetch_array($dbMethods->fetchAllPortfolioItems()))錯誤。 whilemysql_fetch_array部分在每次迭代時都會“重新計算”,這意味着它會一遍又一遍地執行。 如果首先將$dbMethods->fetchAllPortfolioItems()的值分配給變量,則 function 僅執行一次, while將遍歷結果。 改用這個:

$result = $dbMethods->fetchAllPortfolioItems();

while($row = mysql_fetch_array($result))
{
    $pageContent = $row["description"];
}

根據while文檔:

它告訴 PHP 重復執行嵌套語句,只要 while 表達式的計算結果為 TRUE。

mysql_fetch_array($dbMethods->fetchAllPortfolioItems())部分, while您正在使用將始終評估為TRUE ,只要查詢返回一行,因為它被一遍又一遍地調用(因此每次返回相同的第一行) .

導致“內部服務器錯誤”的錯誤可能是因為您的腳本占用的時間超過了php.ini中允許的max_execution_time

這可能是因為您在查詢之前從未真正連接到數據庫。

本質上,您已經為dbConnection制作了與 class 同名的 function,而不是使用__construct方法。

您將在服務器錯誤日志中看到一條非常清晰的錯誤消息,在 linux 上的 apache 中:/var/log/apache/error.log
我還將查看(如果從預覽日志中不清楚)mysql 錯誤日志,該日志也在 /var/log/...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM