0

在我的网站中,我试图在每个页面的顶部包含一个“横幅”,它本身就是一个单独的 php 页面,它查询 MySQL 数据库以返回一个显示的数字。

当我转到横幅 php url (www.sitename.com/banner.php) 的确切 URL 时,它工作得很好。

但是,当我将横幅包含到另一个页面 include'banner.php' 时,它返回以下错误:Database access error 2002: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' ( 2)

我有两种方法需要包含这个,我的主要网站页面都是 php。我的论坛是 phpbb,我需要包含的文件是 HTML,所以我使用了(注意,我做了 ../ 回到横幅根目录,这与找不到我的文件无关。

我假设当包括范围是不同的。我将如何正确完成这包括?

横幅.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"];
}
}

?>
4

2 回答 2

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];
}

编辑:还从 $query 中删除引号:

$result = mysql_query($query, $link);
于 2012-10-24T05:42:44.170 回答
0

第一件事:

  1. 从您的 mysql 语句中删除 @ 并查看您是否收到与变量相关的任何其他错误。调试时不应抑制错误。
  2. 尝试在 sql_connect() 函数中打印主机、端口、用户和密码变量,看看是否在函数中获得了正确的值。
  3. 如果您有权访问您的服务器,请检查 /var/lib/mysql/mysql.sock 是否存在,并具有足够的权限。

    srwxrwxrwx 1 mysql mysql 0 Sep 21 05:50 /var/lib/mysql/mysql.sock

如果到目前为止一切正常,您可能需要进一步排除 MySQL 服务的故障。如果这是问题,重新启动将有助于刷新连接。也检查SO中的类似线程。

于 2012-10-24T07:03:22.687 回答