2012-10-24 95 views
0

在我的網站即時通訊試圖包括在每個頁面的頂部一個「橫幅」,它本身是一個單獨的PHP頁面,查詢MySQL數據庫返回一個數字顯示。PHP包括另一個PHP查詢MySQL

當我得到了橫幅php網址(www.sitename.com/banner.php)的確切網址,它完美的作品。

但是,當我將橫幅包含到另一個頁面include'banner.php'時,它會返回以下錯誤:數據庫訪問錯誤2002:無法通過套接字'/ var/lib/mysql/mysql.sock'(2)

我有2種方式,我需要包括這一點,我的主要網站頁面都是PHP。我的論壇是phpbb和我需要包括的文件是HTML所以我用(注意,我做了../退出到橫幅根目錄,它不是我的文件沒有被發現的問題

我假設當包括的範圍是不同的。我怎麼會正確做到這一點包括?

Banner.php

<?php 
require("../mysql.inc.php"); 
check_get($tp, "tp"); 
$tp = intval($tp); 
$link = sql_connect(); 
$result = sql_query($link, "SELECT COUNT(*) FROM online_count"); 
if (!$result) { 
    echo "Database error.<br>\n"; 
    exit; 
} 
list($total) = mysql_fetch_row($result); 
mysql_free_result($result); 
?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 
<html> 
<head> 
<link rel="stylesheet" type="text/css" href="menu_css.css" media="screen"/> 
</head> 
<body> 
<div class="menucenter"> 
<div class="Online"> <? echo"$total" ?> Online</div> 
</body> 
</html> 

mysql.inc.php

<?php 

$SQLhost = "****.db.****.hostedresource.com"; 
$SQLport = "3306"; 
$SQLuser = "****"; 
$SQLpass = "****"; 
$SQLdb = "****"; 


function sql_connect() 
{ 
global $SQLhost, $SQLport, $SQLdb, $SQLuser, $SQLpass; 

if ($SQLport != "") 
$link = @mysql_connect("$SQLhost:$SQLport","$SQLuser","$SQLpass"); 
else 
$link = @mysql_connect("$SQLhost","$SQLuser","$SQLpass"); 
if (!$link) { 
echo "Database access error ".mysql_errno().": ".mysql_error()."\n"; 
die(); 
} 
$result = mysql_select_db("$SQLdb"); 
if (!$result) { 
echo "Error ".mysql_errno($link)." selecting database '$SQLdb': ".mysql_error($link)."\n"; 
die(); 
    } 
return $link; 
} 

function sql_query($link, $query) 
{ 
global $SQLhost, $SQLport, $SQLdb, $SQLuser, $SQLpass; 

$result = mysql_query("$query", $link); 
if (!$result) { 
echo "Error ".mysql_errno($link).": ".mysql_error($link)."\n"; 
die(); 
} 
return $result; 
} 

function check_get(&$store, $val) 
{ 
$magic = get_magic_quotes_gpc(); 
if (isset($_POST["$val"])) { 
if ($magic) 
$store = stripslashes($_POST["$val"]); 
else 
$store = $_POST["$val"]; 
} 
else if (isset($_GET["$val"])) { 
if ($magic) 
$store = stripslashes($_GET["$val"]); 
else 
$store = $_GET["$val"]; 
} 
} 

?> 
+0

粘貼一些代碼 – GBD

+0

什麼是您的數據庫連接代碼?函數sql_connect()。 – janenz00

+0

您是否試過按照路徑查看套接字文件是否真正駐留在那裏?另外,sql_connect函數是否是native?我找不到任何文檔。 –

回答

0

@Craig,有一種可能性,即包括文件包含其他包含哪些沒有得到正確的路徑。你能否粘貼包含文件的一些代碼給我們來驗證錯誤?

編輯: 您在查詢結束時缺少引號。

$result = sql_query($link, "SELECT COUNT(*) FROM online_count); 

應該

$result = sql_query($link, "SELECT COUNT(*) FROM online_count"); 

編輯: 你必須用引號中的問題。看你check_get函數。 $ val是一個變量,你不需要引號。檢查下面的代碼。

if (isset($_POST[$val])) { 
if ($magic) 
$store = stripslashes($_POST[$val]); 
else 
$store = $_POST[$val]; 
} 
else if (isset($_GET[$val])) { 
if ($magic) 
$store = stripslashes($_GET[$val]); 
else 
$store = $_GET[$val]; 
} 

編輯: 同時刪除從$查詢報價:第一

$result = mysql_query($query, $link); 
+0

我編輯我的第一篇文章,顯示包含文件的PHP代碼 – Craig

+0

那麼,我發現一個快速錯誤是缺少「您的SQL查詢後。$結果= sql_query($鏈接,」選擇計數(*)從online_count「 );在online_count之後檢查你的查詢。「缺少。 –

+0

這已經在那裏,由於一些奇怪的原因,它在這裏刪除它; P – Craig

0

第一件事:

  1. 從你的MySQL語句刪除@,看看你得到任何其他與變量等有關的錯誤。調試時不應該抑制錯誤。
  2. 嘗試在sql_connect()函數內打印主機,端口,用戶和密碼變量,並查看是否在函數中獲得了正確的值。
  3. 如果您有權訪問服務器,請檢查/var/lib/mysql/mysql.sock是否存在,並且具有足夠的權限。

    srwxrwxrwx 1個MySQL的MySQL的0 9月21日05:50 /var/lib/mysql/mysql.sock

如果一切順利,直到這個時候,你可能要進一步解決您的MySQL服務。重新啓動將有助於刷新連接,如果這是問題。檢查SO中的類似線程。