В приведенном ниже коде есть 2 подключения mysql, проблема в том, что второе подключение выдает ошибку подключения, если пароль, входящий в форму, отличается от 123456
,
Теперь пароль, поступающий из формы, не должен иметь ничего общего со вторым соединением, поскольку этот пароль для новой базы данных создается до начала второго соединения. Второе соединение соединяется с другой базой данных все вместе.
Однако, если я использую закомментированный $grantQ
запрос, второе соединение работает нормально. Это означает, что проблема связана с identified by '{$pass}'
в $grantQ
запрос.
identified by '{$pass}'
Запрос должен влиять только на новую базу данных, которая была создана. Почему это влияет на существующую базу данных, к которой подключается второе соединение?
пожалуйста, помогите .. извините за длинное резюме!
<?php
if(isset($_POST['submit'])){
// SUPER CONNECTION
$maindb_db = "little_maindb";
$maindb_server = "localhost";
$maindb_username = "[email protected]";
$maindb_password = "123456";//
$conn = new mysqli($maindb_server, $maindb_username, $maindb_password, $maindb_db);
if ($conn->connect_error) {
die($contact_cus_supp);
}
//NAME OF DB FROM POST - CUSTOMER VIEW
$new_dbname = mysqli_real_escape_string($conn, $_POST['db_name']);
$new_pass = mysqli_real_escape_string($conn, $_POST['pass']);
// CREATING DATABASE
$sql = "CREATE DATABASE IF NOT EXISTS $new_dbname ";
if (!mysqli_query($conn, $sql)) {
mysqli_close($conn);
exit();
}
$host = "localhost";
$user = $_SESSION['sess_email'];
$flush_pri = "FLUSH PRIVILEGES";
$pass = $new_pass;
// GRANT USER PRIVILEGES
echo $current_project;
$grantQ = "GRANT ALL PRIVILEGES ON " . $new_dbname . ".* TO '{$user}'@'{$host}' identified by '{$pass}'";
//$grantQ = "GRANT ALL PRIVILEGES ON " . $new_dbname . ".* TO '{$user}'@'{$host}'";
if(!mysqli_query($conn,$grantQ)){
mysqli_close($conn);
exit();
}
if(!mysqli_query($conn,$flush_pri)){
mysqli_close($conn);
exit();
}
// SUPER CONNECTION CLOSE
mysqli_close($conn);
// ALTOGETHER A DIFFERENT CONNECTION
$secdb_db = "little_userdb";
$secdb_server = "localhost";
$secdb_username = "[email protected]";
$secdb_password = "123456";//
$conn = new mysqli($secdb_server, $secdb_username, $secdb_password, $secdb_db);
if ($conn->connect_error) {
die($contact_cus_supp);
}
echo "HELLO WORLD";
?>
// ФОРМА
echo '<table>';
echo '<form action="create_project.php" method="POST" id = "myform" name = "myform" >';
echo '<tr><th></th></tr><tr><td><input type = "text" value="" name = "db_name" class = "req alphanums" placeholder = "DB Name" ><td></tr>';
echo '<tr><th></th></tr><tr><td><input type = "password" value="" name = "pass" class = "req" placeholder = "Password" ><td></tr>';
echo '<tr><th></th></tr><tr><td><div id = "submit"><input type="submit" id = "submit" name = "submit" value = "Create Project"></div><td></tr>';
echo '</form>';
echo '</table>';
Вы используете одно и то же имя пользователя для вновь созданной базы данных и для доступа little_userdb
, таким образом, меняя свой пароль каждый раз.
В mysql пользователь идентифицируется по имени и маске имени хоста (mysql ищет первое совпадение). Таким образом, ваш код меняет пароль для существующего пользователя и предоставляет ему доступ к новой базе данных.
Других решений пока нет …