A ligar a minha base de dados MYSQL ao php

Tenho o meu código php como este para ligar a minha base de dados do servidor

 <?php
    $con=mysqli_connect("","username" ,"password","databasename");
    if (mysqli_connect_errno())
     {
      echo "Failed to connect to MySQL: " . mysqli_connect_error();
     }
     ?>

mas ele mostrou "não conseguiu se conectar ao MYSQL", o que há de errado com este código?, primeira vez que estou tentando no servidor web, enquanto o meu localhost funcionou perfeitamente. Alguém tem alguma sugestão?

Author: santho, 2015-07-13

8 answers

mysqli_connect("","username" ,"password","databasename");//Server name cannot be NULL

Usar o loaclhost para o nome do servidor (no Loacl)

<?php
    $con = mysqli_connect("localhost","username" ,"password","databasename");

    if (mysqli_connect_errno())
    {
        echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }
?>

Ou pode utilizar MySQLi Procedural

<?php
    $servername = "localhost";
    $username = "username";
    $password = "password";

    // Create connection
    $con = mysqli_connect($servername, $username, $password);

    // Check connection
    if (!$con) {
        die("Connection failed: " . mysqli_connect_error());
    }
    echo "Connected successfully";
?>

Editar 01

$servername = "localhost";
$username = "root";
$password = "";
 2
Author: Abdulla Nilam, 2015-07-13 06:14:54
$localhost = "localhost";
    $root = "root";
    $password = "";
    $con = mysql_connect($localhost,$root,$password) or die('Could not connect to database');
    mysql_select_db("db_name",$con);
 1
Author: Pankaj Upadhyay, 2016-07-23 12:41:59

Deve indicar o nome da máquina

  $con = mysqli_connect("localhost","username" ,"password","databasename");

Se devolve um erro como

Não foi possível ligar ao MySQL: não é possível ligar ao servidor de MySQL local através do 'socket' /var/lib/mysql/mysql.sock'

Substituir localhost por 127.0.0.1.

Se ainda assim não conseguir ligar, verifique se o servidor de mysql está mesmo a correr.

service mysqld start

Então, tente o seguinte:

(Se não tiver definido a senha para o mysql)

mysql -u root

Se já definiu a senha

mysql -u root -p
 0
Author: Abey Josey, 2015-07-13 05:56:31

Porquê usar o mysqli? Utilize apenas DOP para uma ligação mysql mais segura:

$hostname='localhost';
$username='root';
$password='';

try {
  $dbh = new PDO("mysql:host=$hostname;dbname=dbname",$username,$password);
}
catch(PDOException $e) {
 echo $e->getMessage();
}
 0
Author: jackhammer013, 2015-07-13 06:21:20
Eu arrasei, pessoal, agora está a funcionar usando {[[3]}
$con=mysqli_connect("current_server_IP","username" ,"password","databasename");
Agora sou capaz de me ligar ao login. Obrigado pela vossa ajuda!!
 0
Author: santho, 2015-07-13 06:25:21
<?php

$servername="";
$username=""; 
$password="";
$db="";

$conn=mysqli_connect($servername,$username,$password,$db);
//mysql_select_db($db);  
if (!$conn) {
    echo "Error: Unable to connect to MySQL." . PHP_EOL;
    echo "Debugging errno: " . mysqli_connect_errno($conn) . PHP_EOL;
    echo "Debugging error: " . mysqli_connect_error($conn) . PHP_EOL;
    exit;
}
@session_start();

$event_name = $_POST['first_name'];
$first_name = $_POST['last_name'];

$sql = "INSERT INTO customer(first_name, last_name,) VALUES ('$first_name', '$last_name')";

$conn->query($sql);
$lastInsertId = mysqli_insert_id($conn);

?>
 0
Author: , 2018-04-06 10:43:43

Um método melhor é manter a ligação e os parâmetros de login separados.

<?php

class Database{

protected $url;
protected $user;
protected $passw;
protected $db;
protected $connection = null;

public function __construct($url,$user,$passw,$db){
    $this->url = $url;
    $this->user = $user;
    $this->passw = $passw;
    $this->db = $db;
}

public function __destruct() {
    if ($this->connection != null) {
        $this->closeConnection();
    }
}

protected function makeConnection(){
    //Make a connection
    $this->connection = new mysqli($this->url,$this->user,$this->passw,$this->db);
    if ($this->connection->connect_error) {
        echo "FAIL:" . $this->connection->connect_error;
    }
}

protected function closeConnection() {
    //Close the DB connection
    if ($this->connection != null) {
        $this->connection->close();
        $this->connection = null;
    }
}

protected function cleanParameters($p) {
    //prevent SQL injection
    $result = $this->connection->real_escape_string($p);
    return $result;
}

public function executeQuery($q, $params = null){
    $this->makeConnection();        
    if ($params != null) {
        $queryParts = preg_split("/\?/", $q);
        if (count($queryParts) != count($params) + 1) {
            return false;
        }
        $finalQuery = $queryParts[0];
        for ($i = 0; $i < count($params); $i++) {
        $finalQuery = $finalQuery . $this->cleanParameters($params[$i]) . $queryParts[$i + 1];
        }
        $q = $finalQuery;
    }
    $results = $this->connection->query($q);

    return $results;

}
}?>
Isto em combinação com uma fábrica de bases de dados mantém os dados separados e limpos.
<?php 
include_once 'database/Database.php';

class DatabaseFactory {
    private static $connection;

public static function getDatabase(){

   if (self::$connection == null) {
        $url = "URL";
        $user = "LOGIN";
        $passw = "PASSW";
        $db = "DB NAME";
        self::$connection = new Database($url, $user, $passw, $db);
    }
    return self::$connection;
}

} 
?>

Depois disso, poderá facilmente tornar as suas classes CRUD (com base na classe) (objectname+DB)

<?php
include_once "//CLASS";
include_once "//DatabaseFactory";

class CLASSDB
{
private static function getConnection(){
    return DatabaseFactory::getDatabase();
}
public static function getById($Id){
    $results = self::getConnection()->executeQuery("SELECT * from DB WHERE Id = '?'", array(Id));

    if ($results){
        $row = $results->fetch_array();
        $obj = self::convertRowToObject($row);
        return $obj;
    } else {
        return false;
    }
}
public static function getAll(){
    $query = 'SELECT * from DB';
    $results = self::getConnection()->executeQuery($query);
    $resultsArray = array();
    for ($i = 0; $i < $results->num_rows; $i++){
        $row = $results->fetch_array();
        $obj = self::convertRowToObject($row);
        $resultsArray[$i] = $obj;
    }
    return $resultsArray;
}
public static function getName($Id){
    $results = self::getConnection()->executeQuery("SELECT column from DB WHERE Id = '?'", array($Id));

        $row = $results->fetch_array();
        return $row['column'];
}
public static function convertRowToObject($row){
    return new CLASSNAME(
        $row['prop'],
        $row['prop'],
        $row['prop'],
        $row['prop']
    );
}
public static function insert ($obj){
    self::getConnection()->executeQuery("INSERT INTO DB VALUES (null, '?', '?', '?')",
        array($obj->prop, $obj->prop, $obj->prop));
}
public static function update ($propToUpdate, $Id){
    self::getConnection()->executeQuery("UPDATE User SET COLTOUPDATE = ? WHERE Id = ?",
        array($propToUpdate, $Id));
}
}

E com este código fino é fácil seleccionar os itens na interface:

include 'CLASSDB';

<php
$results = CLASSDB::getFunction();
        foreach ($results as $class) {  
?>
<li><?php echo $class->prop ?><li>
<php } ?>
 0
Author: Sarah Smith, 2018-06-13 08:33:01

Localhost como este (mysqli Procedural)

<?php

$servername ="localhost";

$username="username";//username like (root)

$password="password";//your database no password. (" ") 

$database="database";

$con=mysqli_connect($servername,$username,$password,$database);

if (!$con) {

    die("Connection failed: " . MySQL_connect_error());

}
else{

echo "Connected successfully";

}
 -1
Author: krishna, 2018-05-10 10:11:52