Я настроил базовую таблицу и соединил файл PHP с базой данных. Я могу получить данные из базы данных с помощью SELECT
, Тем не менее, когда я пытаюсь использовать UPDATE
или же INSERT INTO
Я получаю сообщение:
Msgstr «Команда INSERT запрещена пользователю » @ ‘localhost’ для таблицы ‘table_data'».
Когда я пытаюсь использовать запрос в PMA, я могу вставить данные. Но когда я хочу изменить права пользователя, он говорит, что у меня нет прав на это. Но когда я использую SQL SHOW GRANTS, я получаю:
«Гранты для [email protected].% GRANT USAGE ON . TO ‘xxxl’@’10.0.%’
УКАЗАН ПАРОЛЕМ, ПРЕДОСТАВЛЯЮЩИМ ВСЕ ПРИВИЛЕГИИ НА
‘database_name’. * TO ‘xxx’@’10.0.%’ с опцией GRANT.
Я использую единственную учетную запись MySQL, предоставленную моим хостом, поэтому я предполагаю, что это пользователь root.
$servername = "mysql.domain_name.nl";
$username = 'xxx';
$password = 'xxx';
$conn = new mysqli($servername, $username, $password);`
$username = $_POST['username'];
$password = $_POST['password'];
$query = "INSERT INTO 'game'.'login_data' ('username', 'password') VALUES ('".$username."', '".$password."')";
$data = mysql_query ($query)or die(mysql_error());
Пожалуйста, помогите мне получить права, чтобы иметь возможность INSERT
,
Сначала вам нужно прочитать об использовании mysqli. Все, что вам нужно, здесь: http://php.net/manual/en/book.mysqli.php
Вы увидите, что вам не хватает 1 параметра из вашего $conn
Должно быть new mysqli('localhost', 'my_user', 'my_password', 'my_db');
$servername = "mysql.domain_name.nl";
$username = 'xxx';
$password = 'xxx';
$conn = new mysqli($servername, $username, $password, **add database**);
$username = $_POST['username'];
$password = $_POST['password'];
В целях безопасности вы хотите использовать подготовленные заявления.
Измените это на следующее:
if ($stmt = $conn->prepare("INSERT INTO `game`.`login_data` (username, password) VALUES (?, ?)")) {
$stmt->bind_param('ss', $username , $password );
// Execute the prepared query.
if (! $stmt->execute()) {
$stmt->close();
}
}
}
Конечно, это не тот способ, которым вы должны полностью относиться к пользовательской базе данных. Вы хотите хешировать пароли, хранить соли и т. Д. Но для этого вопроса. Выше должно быть достаточно.
Я привел в порядок ваш код, исправил синтаксические ошибки, а также переключил весь код на PDO.
MySQL устарела и MySQLi открыта для взлома SQL-инъекций, даже если mysqli_real_escape_string
!
<?php
$user = 'xxx';
$pass = 'xxx';
$conn = new PDO('mysql:host=localhost;dbname=mysql.domain_name.nl', $user, $pass);
$username = $_POST['username'];
$password = $_POST['password'];
$stmt = $conn->prepare("INSERT INTO `game`.`login_data` ('username', 'password') VALUES (:username, :password)");
$stmt->bindParam(':username', $username);
$stmt->bindParam(':password', $password);
$stmt->execute();
?>
Для получения дополнительной информации о PDO, обратитесь к руководству здесь: http://php.net/manual/en/book.pdo.php