[英]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进行比较,因此请采样:
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.