Php MySQL连接可以在本地主机上工作,但不能在Web服务器上工作

Php MySQL连接可以在本地主机上工作,但不能在Web服务器上工作,php,mysql,Php,Mysql,大家好 我有一个困扰我的问题,我似乎找不到解决它的办法。即使是我的托管服务中的技术支持也无法解决这个问题 我创建了一个小脚本来完成一个简单的任务。我要求员工登录以执行任何上述任务 我已经在开发服务器上测试了该应用程序,登录脚本工作得很好,但当我将其放在Web服务器上时,连接从未建立 我在dbcon.php文件中使用相同的用户名和passowrd使用phpMyAdmin登录,它可以工作,我运行查询,它们也可以工作 以下是文件: 1:dbcon.php <?php $connect = "my

大家好

我有一个困扰我的问题,我似乎找不到解决它的办法。即使是我的托管服务中的技术支持也无法解决这个问题

我创建了一个小脚本来完成一个简单的任务。我要求员工登录以执行任何上述任务

我已经在开发服务器上测试了该应用程序,登录脚本工作得很好,但当我将其放在Web服务器上时,连接从未建立

我在dbcon.php文件中使用相同的用户名和passowrd使用phpMyAdmin登录,它可以工作,我运行查询,它们也可以工作

以下是文件:

1:dbcon.php

<?php
$connect = "mysql:host=localhost;dbname=mdchaara_draiwil_dms;charset=utf8";
$db_user = "dbusername";
$db_pass = "dbpassword";

$db = new PDO($connect,$db_user,$db_pass);
?>

2:login.php:

    <?php
session_start();
require "../../_dbcon/_dbcon.php";
//Timezone settings:
$timezone = "Asia/Kuwait";
                if(function_exists('date_default_timezone_set')) date_default_timezone_set($timezone);

// check the username has only alpha numeric characters
if (ctype_alnum($_POST['username']) != true)
{
    //if there is no match
    $message = "Username must be alpha numeric";
}
//check the password has only alpha numeric characters ***/
if (ctype_alnum($_POST['password']) != true)
{
    //if there is no match ***/
    $message = "Password must be alpha numeric";
}
else
{
    // if we are here the data is valid and we can insert it into database
    $username = filter_var($_POST['username'], FILTER_SANITIZE_STRING);
    $password = filter_var($_POST['password'], FILTER_SANITIZE_STRING);


    //SQL Injection Precaution:/
    $username   =   stripslashes($username);
    $password   =   stripslashes($password);


   try
    {


        //Select Statement:
        $stmt = $db->query("SELECT * 
                            FROM dms_gt_users 
                            WHERE username = '$username' AND password = '$password'");

        $result = $stmt->rowCount();
    }
    catch(PDOException $ex) {
        echo "An Error occured!"; //user friendly message
        some_logging_function($ex->getMessage());
    }

    // If result matched $username and $password, there will be one row
    if($result==1){
        // check if the account is active:

        $stmt = $db->query("SELECT id_status 
                            FROM dms_gt_users 
                            WHERE username = '$username' AND password = '$password'");
            while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
                    $id_status=  $row['id_status'];
                    } 

        $stmt = $db->query("SELECT employee_id 
                            FROM dms_gt_users 
                            WHERE username = '$username' AND password = '$password'");
            while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
                    $employee_id=  $row['employee_id'];
                    } 

        //Check if account is active:
        if($id_status == "A"){

            // Create Session ID:
            $session_id = "";
            $_SESSION['sid'] = "";

            $session_id = mt_rand(100000, 999999);
            $sid_update = $db->query("UPDATE    dms_gt_users 
                                SET `session_id`='$session_id'
                                WHERE username='$username' and password ='$password'");

            $_SESSION['sid']    =   $session_id;

            //Get last login details:
            $current_login = date("Y-m-d H:i:s");

            $stmt = $db->query('SELECT `last_log_in`
                                FROM dms_gt_users 
                                WHERE `employee_id` = '.$employee_id);

                while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
                    $last_log_in = $row['last_log_in'];
                }   

                $_SESSION['last_log_in'] = $last_log_in;

            //get IP address:
            $ip = getenv('REMOTE_ADDR');

            //Add login details to Activity Log:
            $stmt = $db->query("INSERT INTO dms_activity_log
                     (`employee_id`, `activity_date_time`, `activity`, `ip_address`) 
                     VALUES ('$employee_id', '$current_login', 'Logged in', '$ip')");

            //Add login details to users table:
            $stmt = $db->query("UPDATE  dms_gt_users 
                                SET `last_log_in`='$current_login'
                            WHERE username='$username' and password ='$password'");

            //update session login
            $_SESSION['login']= 1;

            //save employee id to session
            $_SESSION['employee_id'] = $employee_id;

            // redirect to portal home:
                header ("Location:../../../home.php");
            }

        //Account is not Active:
        else{
            header ("Location:../../../index.php");
        }
    }

    //Username or password are incorrect
    else {
            header ("Location:../../../index.php");
    }
}

?>

如果Roger Ng的答案无法解决问题,那么您可能会被防火墙阻止连接。检查您的mysql服务器端口。。。通常是3306年。

如果Roger Ng的答案不能解决这个问题,那么您可能有防火墙阻止您的连接。检查您的mysql服务器端口。。。通常是3306年。

如果Roger Ng的答案不能解决这个问题,那么您可能有防火墙阻止您的连接。检查您的mysql服务器端口。。。通常是3306年。

如果Roger Ng的答案不能解决这个问题,那么您可能有防火墙阻止您的连接。检查您的mysql服务器端口。。。通常是3306。

如果不查看服务器本身,就很难知道为什么会发生这种情况。我建议您启用异常模式,以便查看问题所在。例如:

try {
   $connect = "mysql:host=localhost;dbname=mdchaara_draiwil_dms;charset=utf8";
   $db_user = "dbusername";
   $db_pass = "dbpassword";

  $db = new PDO($connect,$db_user,$db_pass);
  $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);    
}
catch (PDOException $e) {
    echo 'PDO Exception: '.$e->getMessage();
    die();
}

现在排除故障就容易多了。检查是否有任何错误,如果可能,用消息更新原始问题。之后我将编辑此答案。

如果不查看服务器本身,很难判断为什么会发生这种情况。我建议您启用异常模式,以便查看问题所在。例如:

try {
   $connect = "mysql:host=localhost;dbname=mdchaara_draiwil_dms;charset=utf8";
   $db_user = "dbusername";
   $db_pass = "dbpassword";

  $db = new PDO($connect,$db_user,$db_pass);
  $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);    
}
catch (PDOException $e) {
    echo 'PDO Exception: '.$e->getMessage();
    die();
}

现在排除故障就容易多了。检查是否有任何错误,如果可能,用消息更新原始问题。之后我将编辑此答案。

如果不查看服务器本身,很难判断为什么会发生这种情况。我建议您启用异常模式,以便查看问题所在。例如:

try {
   $connect = "mysql:host=localhost;dbname=mdchaara_draiwil_dms;charset=utf8";
   $db_user = "dbusername";
   $db_pass = "dbpassword";

  $db = new PDO($connect,$db_user,$db_pass);
  $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);    
}
catch (PDOException $e) {
    echo 'PDO Exception: '.$e->getMessage();
    die();
}

现在排除故障就容易多了。检查是否有任何错误,如果可能,用消息更新原始问题。之后我将编辑此答案。

如果不查看服务器本身,很难判断为什么会发生这种情况。我建议您启用异常模式,以便查看问题所在。例如:

try {
   $connect = "mysql:host=localhost;dbname=mdchaara_draiwil_dms;charset=utf8";
   $db_user = "dbusername";
   $db_pass = "dbpassword";

  $db = new PDO($connect,$db_user,$db_pass);
  $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);    
}
catch (PDOException $e) {
    echo 'PDO Exception: '.$e->getMessage();
    die();
}

现在排除故障就容易多了。检查是否有任何错误,如果可能,用消息更新原始问题。之后我将编辑此答案。

检查数据库的url。通常,在共享/专用托管环境中,DB server和App server位于不同的机器上。此外,许多服务提供商不在端口3306上提供mysql群集服务。因此,请从您的主机CPanel或技术支持团队获得正确的URL和数据库端口


另外,将应用服务器的IP地址添加到远程MySQL的允许IP地址列表中。

检查数据库的url。通常,在共享/专用托管环境中,DB server和App server位于不同的机器上。此外,许多服务提供商不在端口3306上提供mysql群集服务。因此,请从您的主机CPanel或技术支持团队获得正确的URL和数据库端口


另外,将应用服务器的IP地址添加到远程MySQL的允许IP地址列表中。

检查数据库的url。通常,在共享/专用托管环境中,DB server和App server位于不同的机器上。此外,许多服务提供商不在端口3306上提供mysql群集服务。因此,请从您的主机CPanel或技术支持团队获得正确的URL和数据库端口


另外,将应用服务器的IP地址添加到远程MySQL的允许IP地址列表中。

检查数据库的url。通常,在共享/专用托管环境中,DB server和App server位于不同的机器上。此外,许多服务提供商不在端口3306上提供mysql群集服务。因此,请从您的主机CPanel或技术支持团队获得正确的URL和数据库端口



另外,将应用服务器的IP地址添加到
远程MySQL
Cpanel界面中的允许IP地址列表中。

您可以使用PDO。请使用带有占位符的准备语句来避免sql注入。在开发时,添加
$pdo->setAttribute(pdo::ATTR_ERRMODE,pdo::ERRMODE_EXCEPTION)在连接打开后立即执行。由于出现错误,您在这里遇到了严重的安全问题
$\u POST
数据不转义就不会进入查询。正如@vmai所说,PDO有占位符,我知道SQL注入问题,我简化了代码以找到问题的根源。谢谢大家:)您是否通过简化代码来集成sql注入问题?在哪一点上你有问题?您已经成功创建了一个PDO对象。那现在怎么办?你用PDO。请使用带有占位符的准备语句来避免sql注入。在开发时,添加
$pdo->setAttribute(pdo::ATTR_ERRMODE,pdo::ERRMODE_EXCEPTION)在连接打开后立即执行。由于出现错误,您在这里遇到了严重的安全问题
$\u POST
数据不转义就不会进入查询。正如@vmai所说,PDO有占位符,我知道SQL注入问题,我简化了代码以找到问题的根源。谢谢大家:)您是否通过简化代码来集成sql注入问题?在哪一点上你有问题?您已经成功创建了一个PDO对象。那现在怎么办