[英]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 正在尋找名為dbHostName
、 dbUserName
、 dbPassword
和dbDatabaseName
的常量。 確保您的“config.php”正在定義常量。
3 - dbFunctions.php 中的 while($row = mysql_fetch_array($ dbFunctions.php
while($row = mysql_fetch_array($dbMethods->fetchAllPortfolioItems()))
錯誤。 while
的mysql_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.