2012-10-24 74 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中的类似线程。