簡體   English   中英

無法使用PHP腳本連接到本地托管的mysql

[英]Can't connect to local hosted mysql using PHP script

我正在嘗試構建一個自托管的PHP網站,但是從我的PHP腳本連接到數據庫時遇到了麻煩。

請注意以下事項

1)。 這段代碼使我可以從終端連接到MAMP而不出現問題,因此我知道MySQL可以正常工作等等

mysql --host=127.0.0.1 --port=8889 --user=root -p 

2)當我嘗試在遠程托管平台上構建站點時,此代碼使我可以從php腳本連接到刪除服務器上的MySQL,因此我知道此代碼本身沒有什么問題,但是沒有在我的計算機上工作。

defined('DB_SERVER') ? null : define("DB_SERVER","host");
defined('DB_USER') ? null : define("DB_USER","username");
defined('DB_PASS') ? null : define("DB_PASS","password");
defined('DB_NAME') ? null : define("DB_NAME","photo_gallery");

3我已經能夠在計算機上運行一個自托管的wordpress網站,但是我沒有為此建立數據庫連接(它在代碼中的某個位置),所以我沒有做錯什么。 可通過以下路徑訪問該站點。 http:// localhost:8888 / wordpress /即使已在端口8889上連接(根據mysql)

4 MAMP告訴我可以使用這種格式從自己的腳本連接到數據庫

Host    localhost
Port    8889
User    root
Password    root

因此,我添加了這一行

defined('DB_PORT') ? null : define("DB_PORT","8889");

像這樣

defined('DB_SERVER') ? null : define("DB_SERVER","host");
    **defined('DB_PORT') ? null : define("DB_PORT","8889");**
    defined('DB_USER') ? null : define("DB_USER","username");
    defined('DB_PASS') ? null : define("DB_PASS","password");
    defined('DB_NAME') ? null : define("DB_NAME","photo_gallery");

但它仍然沒有用。 當我嘗試測試數據庫連接時,被告知數據庫連接失敗。

有任何想法嗎?

編輯。 我試圖將端口放置在localhost旁邊,但是它不起作用。

defined('DB_SERVER') ? null : define("DB_SERVER","localhost:8889");
defined('DB_USER') ? null : define("DB_USER","root");
defined('DB_PASS') ? null : define("DB_PASS","root");
defined('DB_NAME') ? null : define("DB_NAME","photo_gallery");

編輯。 上面的代碼在config.php中,這是包含在database.php中的

<?php 

require_once("config.php");

class MySQLDatabase {

    private $connection;

    function __construct(){
        $this->open_connection();
    }

    public function open_connection(){
        $this->connection = mysql_connect(DB_SERVER, DB_USER, DB_PASS);
    if(!$connection){
        die("Database connection failed:" . mysql_error());
        } else {
        $db_select = mysql_select_db(DB_NAME, $this->connection);
        if (!$db_select) {
            die("Database selection failed: " . mysql_error());
        }
        }
    }

    public function close_connection(){

        if(isset($this->connection)){
            mysql_close($this->connection);
            unset($this->connection);
        }
    }


    public function query($sql) {
    $result = mysql_query($sql, $this->connection);
    $this->confirm_query($result);
        return $result;
    }

    public function mysql_prep( $value ) {
        $magic_quotes_active = get_magic_quotes_gpc();
        $new_enough_php = function_exists( "mysql_real_escape_string" ); // i.e. PHP >= v4.3.0
        if( $new_enough_php ) { // PHP v4.3.0 or higher
            // undo any magic quote effects so mysql_real_escape_string can do the work
            if( $magic_quotes_active ) { $value = stripslashes( $value ); }
            $value = mysql_real_escape_string( $value );
        } else { // before PHP v4.3.0
            // if magic quotes aren't already on then add slashes manually
            if( !$magic_quotes_active ) { $value = addslashes( $value ); }
            // if magic quotes are active, then the slashes already exist
        }
        return $value;
    }

    private function confirm_query($result){
        if(!$result){
            die("Database query failed:" . mysql_error());
        }
    }

}


$database = new MySQLDatabase();


?>

以下代碼段的輸出是什么?

<?php

// test.php

$host = 'localhost:8889';
$username = 'root';
$password = 'root';
$database = 'your_database';

if(!$connection = mysql_connect($host, $username, $password))
  die('Error connecting to '.$host.'. '.mysql_error());

if(!mysql_select_db($database))
  die('Error selecting '.$database.'. '.mysql_error());

echo 'Connection successful.';

?>

如果執行時沒有錯誤,那么您可能只是錯誤地設置了常量。 注意, mysql_connect將端口作為主機參數的一部分,而不是單獨的參數。

嘗試127.0.0.1:3307

它對我有用

MySQL默認端口3306的示例:

mysql_connect('localhost:3306','root','password');

在遠程服務器和本地Web服務器之間復制腳本時,這確實使事情變得更加容易。

您可以嘗試使用:

定義( “DB_SERVER”, “127.0.0.1”);

重要:檢查是否已定義是由define()完成的,而不是將其與null進行比較,因此請采樣:

http://www.php.net/defined

defined('DBSERVER') or define('DBSERVER', 'localhost:8889');

在建立連接時提供端口信息只是將其與服務器名稱一起添加,即,如果您的mysql服務器是localhost則在建立連接時僅提供它

localhost:8889

因此您的示例腳本可能如下所示:

$strServer  = "localhost:8889";
$strUser    = "root";
$strPassword    = "root";
$strDB          = "test_db";    


    $conn = @mysql_connect($strServer, $strUser, $strPassword);
    if(!$conn) {
        die('Unable to connect to database: ' . mysql_error());
    }else{
        $db=mysql_select_db($strDB);
        if(!$db){die('Error Selecting Database: '.$strDB.' [Error : '.mysql_error().']');}
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM