#php #mysql
#php #mysql #mysqli
Вопрос:
У меня есть такой код для подключения к базе данных моего сервера:
<?php
$con = mysqli_connect("", "username", "password", "databasename");
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
Но отображается «Не удалось подключиться к MySQL», что не так с этим кодом? В первый раз я пробую это на веб-сервере, тогда как мой локальный хост работал отлично.
Комментарии:
1. Попробуйте указать
hostname
inmysqli_connect
.2. Это потому, что параметр host не имеет значения null или set. Он практически пуст. Таким образом, mysql не может подключиться к «».
Ответ №1:
mysqli_connect("","username" ,"password","databasename");//Server name cannot be NULL
используйте loaclhost для имени сервера (в Loacl)
<?php
$con = mysqli_connect("localhost","username" ,"password","databasename");
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
?>
Или можно использовать MySQLi процедурный
<?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";
?>
РЕДАКТИРОВАТЬ 01
$servername = "localhost";
$username = "root";
$password = "";
Комментарии:
1. я попробовал MySQLi процедурный, он отображает
Connection failed: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
2. Запущен ли ваш сервер MySQL? Если он запущен, перезапустите службу.
3. Я решил это, ребята,
using current server ip address
вместо localhost или 127.0.0.1!14. если вы используете localhost, это тоже тот же результат.
Ответ №2:
Для подключения к базе данных MySQL с помощью mysqli вам необходимо выполнить 3 строки кода. Вам необходимо включить сообщение об ошибках, создать экземпляр класса mysqli и установить правильную кодировку.
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli('localhost', 'username', 'password', 'dbname', 3307);
$mysqli->set_charset('utf8mb4'); // always set the charset
Все параметры в конструкторе mysqli являются необязательными, но в большинстве случаев вы хотели бы передать как минимум 4 из них. В правильном порядке они:
- Хост MySQL. Большую часть времени это так
localhost
, но если вы подключаетесь к удаленному хосту, это будет какой-то другой IP-адрес. Убедитесь, что это не содержитhttp
часть протокола. Это должен быть либо IP-адрес, либо URL-адрес без протокола. - Имя пользователя. Это имя пользователя вашего пользователя MySQL. Для подключения к серверу MySQL у вас должен быть действительный пользователь с нужными привилегиями.
- Пароль.
- Имя базы данных. Это имя базы данных MySQL, к которой вы хотите подключиться.
- Порт. В большинстве случаев порт по умолчанию является правильным, но если вы используете, например, wampserver с MariaDB, вы можете захотеть изменить его на 3307.
- Имя сокета. Указывает сокет или именованный канал, который следует использовать.
К сожалению, кодировка не является одним из этих параметров, поэтому вы должны использовать специальную функцию для установки этого очень важного параметра.
Пожалуйста, будьте осторожны, чтобы никогда не отображать ошибки подключения вручную. Это совершенно не нужно, и это приведет к утечке ваших учетных данных.
На несвязанном примечании: я не рекомендую использовать MySQLi в новом проекте. Пожалуйста, рассмотрите возможность использования PDO, который в целом является гораздо лучшим API для подключения к MySQL.
Ответ №3:
Зачем использовать mysqli? Просто используйте PDO для более безопасного подключения к mysql просто используйте:
$hostname='localhost';
$username='root';
$password='';
$dbh = new PDO("mysql:host=$hostname;dbname=dbname",$username,$password);
Ответ №4:
Вы должны указать имя хоста
$con = mysqli_connect("localhost","username" ,"password","databasename");
Если он возвращает ошибку, например
Не удалось подключиться к MySQL: не удается подключиться к локальному серверу MySQL через сокет ‘/ var/ lib/mysql/mysql.sock’
Заменить localhost
на 127.0.0.1
.
Если вы все еще не можете подключиться, проверьте, действительно ли запущен сервер mysql.
service mysqld start
Затем попробуйте выполнить одно из следующих действий:
(если вы не установили пароль для mysql)
mysql -u root
если вы уже установили пароль
mysql -u root -p
Ответ №5:
$localhost = "localhost";
$root = "root";
$password = "";
$con = mysql_connect($localhost,$root,$password) or die('Could not connect to database');
mysql_select_db("db_name",$con);
Ответ №6:
<?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);
?>
Ответ №7:
Лучший способ — разделить параметры подключения и входа.
<?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;
}
}?>
Это в сочетании с фабрикой базы данных сохраняет данные разделенными и чистыми.
<?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;
}
}
?>
После этого вы можете легко создать свои (основанные на классе) классы CRUD (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));
}
}
И с таким тонким кодированием выбрать элементы во внешнем интерфейсе проще простого:
include 'CLASSDB';
<php
$results = CLASSDB::getFunction();
foreach ($results as $class) {
?>
<li><?php echo $class->prop ?><li>
<php } ?>
Ответ №8:
Самый простой способ подключиться к серверу MySQL с помощью php.
$conn=new mysqli("localhost", "Username", "Password", "DbName");
if($conn->connect_error)
{
die("connection faild:".$conn->connect_error);
}
echo "Connection Successfully..!";
Ответ №9:
локальный хост, подобный этому (процедурный MySQLi)
<?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";
}