0

私のサイトでは、各ページの上部に「バナー」を含めようとしています。これは、MySQLデータベースにクエリを実行して表示される数値を返す個別のphpページです。

バナーphpurl(www.sitename.com/banner.php)の正確なURLにアクセスすると、完全に機能します。

ただし、バナーを別のページに含めると、「banner.php」が含まれ、次のエラーが返されます。データベースアクセスエラー2002:ソケット「/var/lib/mysql/mysql.sock」を介してローカルMySQLサーバーに接続できません( 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"];
}
}

?>
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 に答える