0

基本的に、アプリと通信できるようにJSONで情報を印刷しようとしていますが、奇妙な理由でphpスクリプトからMySQLデータベースに接続できません。エラーの原因は何でしょうか。警告:mysql_connect()[function.mysql-connect]:13行目の/srv/disk11/1158855/www/(myphpwebsite)/lib.phpでクエリ中にMySQLサーバーへの接続が失われました。接続しない:クエリ中にMySQLサーバーへの接続が失われました。

また、13行目はlib.phpの行を示しています。

mysql_connect ( $dbhost, $dbuser, $dbpass) or die("Could not connect: ".mysql_error());

これは、誰かがソースを追跡したい場合の前の質問のフォローアップであることに注意する必要があります:phpでサイトに接続するMySQLの問題

最後に、mysqlを使用しているローカルホストとリモートサーバーの両方から同じエラーが発生します

lib.php

<?

//Database Information

$dbhost = "31.170.160.76";
$dbname = "testdatabase";
$dbuser = "(personalinformation)";
$dbpass = "tested123";


//Connect to database

mysql_connect ( $dbhost, $dbuser, $dbpass) or die("Could not connect: ".mysql_error());
mysql_select_db($dbname) or die(mysql_error());

//executes a given sql query with the params and returns an array as result
function query() {
    global $link;
    $debug = false;

    //get the sql query
    $args = func_get_args();
    $sql = array_shift($args);

    //secure the input
    for ($i=0;$i<count($args);$i++) {
        $args[$i] = urldecode($args[$i]);
        $args[$i] = mysqli_real_escape_string($link, $args[$i]);
    }

    //build the final query
    $sql = vsprintf($sql, $args);

    if ($debug) print $sql;

    //execute and fetch the results
    $result = mysqli_query($link, $sql);
    if (mysqli_errno($link)==0 && $result) {

        $rows = array();

        if ($result!==true)
        while ($d = mysqli_fetch_assoc($result)) {
            array_push($rows,$d);
        }

        //return json
        return array('result'=>$rows);

    } else {

        //error
        return array('error'=>'Database error');
    }
}

//loads up the source image, resizes it and saves with -thumb in the file name
function thumb($srcFile, $sideInPx) {

  $image = imagecreatefromjpeg($srcFile);
  $width = imagesx($image);
  $height = imagesy($image);

  $thumb = imagecreatetruecolor($sideInPx, $sideInPx);

  imagecopyresized($thumb,$image,0,0,0,0,$sideInPx,$sideInPx,$width,$height);

  imagejpeg($thumb, str_replace(".jpg","-thumb.jpg",$srcFile), 85);

  imagedestroy($thumb);
  imagedestroy($image);
}

?>

Index.php

<?
session_start();
require("lib.php");
require("api.php");

header("Content-Type: application/json");

switch ($_POST['command']) {
    case "login": 
        login($_POST['username'], $_POST['password']); break;

    case "register":
        register($_POST['username'], $_POST['password']); break;

}

exit();
?>

api.php

<?php

function errorJson($msg){
    print json_encode(array('error'=>$msg));
    exit();
}

function register($user, $pass) {
    //check if username exists
    $login = query("SELECT username FROM login WHERE username='%s' limit 1", $user);
    if (count($login['result'])>0) {
        errorJson('Username already exists');

//try to register the user
$result = query("INSERT INTO login(username, pass) VALUES('%s','%s')", $user, $pass);
if (!$result['error']) {
    //success
    login($user, $pass);
} else {
    //error
    errorJson('Registration failed');
}
}
}
function login($user, $pass) {
    $result = query("SELECT IdUser, username FROM login WHERE username='%s' AND pass='%s' limit 1", $user, $pass);

    if (count($result['result'])>0) {
        //authorized
        $_SESSION['IdUser'] = $result['result'][0]['IdUser'];
        print json_encode($result);
    } else {
        //not authorized
        errorJson('Authorization failed');
    }
}


?>
4

2 に答える 2

0

これは「接続」回線上にあるため、サーバーは検出されました(そうでない場合は、別のメッセージが表示されます)が、ログインについてネゴシエートしていません。

マニュアルから直接:

ごくまれに、クライアントがサーバーへの初期接続を試みているときに発生する可能性があります。この場合、connect_timeout値が数秒に設定されていると、10秒に増やすことで問題を解決できる可能性があります。距離が非常に長い場合や接続が遅い場合は、さらに長くなる可能性があります。

そうでない場合は、ネットワークの問題であるか、認証の途中で接続が終了している可能性があります。mysqlホストに、特定のIPから来ているという奇妙な検証がないことを確認します(フローの途中で認証を強制終了するよりも標準的な管理方法があるため、奇妙だと言います)。 MySQLサーバーに近い(ネットワーク速度の点で近い)サーバー。

于 2012-10-03T05:14:56.950 に答える
0

私は何が問題なのか理解しました。さらに下のPHPコードがログインと競合していたことがわかりました。そのため、複数のリモートMySQLと自分のローカルホストで認証されません。

于 2012-10-06T06:37:19.350 に答える