【问题标题】:PHP Include another php that queries MySQLPHP 包含另一个查询 MySQL 的 php
【发布时间】:2012-10-14 03:47:16
【问题描述】:

在我的网站中,我试图在每个页面的顶部包含一个“横幅”,它本身就是一个单独的 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)

我有 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"];
}
}

?>

【问题讨论】:

  • 你的数据库连接码是多少?函数 sql_connect()。
  • 您是否尝试过按照路径查看套接字文件是否确实存在于那里?另外,sql_connect 函数是原生的吗?我找不到任何文档。

标签: php mysql include require


【解决方案1】:

第一件事:

  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 中的类似线程。

【讨论】:

    【解决方案2】:

    @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);
    

    【讨论】:

    • 我编辑了我的第一篇文章以显示包含文件的 php 代码
    • 好吧,我发现的一个快速错误是您的 sql 查询后缺少 "。$result = sql_query($link, "SELECT COUNT(*) FROM online_count"); 在 online_count 之后检查您的查询。 " 不见了。
    • 那已经在那里了,出于某种奇怪的原因它在这里删除了它;P
    • 已接受。您的 mysql.inc.php 文件有问题。你能把那个代码也贴一下吗?
    • 添加到原始帖子。如果我直接访问 mysite.com/banner.php,它会连接到 MySQL 服务器并返回正确的值
    猜你喜欢
    • 2011-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-16
    • 1970-01-01
    • 1970-01-01
    • 2013-10-05
    相关资源
    最近更新 更多