2016-01-16 3 views
1

Я отправляю данные с помощью PHP в mysqlserver. (Услуга Rest) Проблемы я получаю эту ошибку:Php Post Insert Error Доступ запрещен для пользователя 'root' @ 'localhost' (с использованием пароля: YES)

Connection failed: Access denied for user 'root'@'localhost' (using password: YES).

Я изменил мой запрос от вставки к оператору выбора, и он работает, я мог бы получить данные, но я не могу показаться, чтобы сделать вставку , Я проверил привилегии и даже сменил пароль. Я уверен, что этот вопрос задан раньше, но решения, которые я пробовал, не работают, могут быть уникальными для контекста. Я не уверен, что его код или что? Пожалуйста помоги.

<?php 

$servername = "localhost"; 
$username = "root"; 
$password = "****"; 
$dbname = "TripBuddy"; 

$name = $_POST['Name']; 
$surname = $_POST['Surname']; 
$email = $_POST['Email']; 
$password = $_POST['Password']; 

// Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 
// Check connection 
if ($conn->connect_error) { 
die("Connection failed: " . $conn->connect_error); 
} 

$sql = "INSERT INTO 'TripBuddy'.'AppUser01' ('Name', 'Surname', 'Email',    'Password') VALUES ('$name','$surname','$email','$password');"; 

if ($conn->query($sql) === TRUE) { 
    echo "New record created successfully"; 
    } else { 
    echo "Error: " . $sql . "<br>" . $conn->error; 
    } 

    $conn->close(); 
    ?> 
+2

Я готов поспорить, это потому, что вы используете одну и ту же переменную для '$ password'. Измените один из них. Держу пари, что это сработает. –

+2

Оберните 'quotes' из' имя таблицы и имя столбца' вместо использования 'backtick' – Saty

+1

Однако ваш запрос не работает здесь, и вы увидите ошибку после изменения переменной пароля. Вам нужно удалить кавычки для таблицы и столбцов. При использовании обоих моих комментариев это должно работать. Редактировать: так же, как @Saty заявил; тики, а не кавычки. –

ответ

3

Что происходит здесь является то, что вы используете $password как для вашей БД и вашего массива POST.

  • Необходимо изменить один из них, поскольку это конфликт. Я видел это раньше.

Тогда ваш запрос использует обычные кавычки вместо тиков.

$sql = "INSERT INTO `TripBuddy`.`AppUser01` (`Name`, `Surname`, `Email`, `Password`) 

     VALUES ('$name','$surname','$email','$password');"; 

Настоящий код действителен до SQL injection. Использовать mysqli_* with prepared statements, или PDO с prepared statements.

Редактировать:

Как заявили Saty; использование mysqli_affected_rows() для истинность.


Пароли

Я также заметил, что вы можете хранить пароли в виде обычного текста. Это не рекомендуется.

Используйте один из следующих действий:

Другие ссылки:


Добавить error reporting в верхней части файла (ов), который поможет найти ошибки.

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 

// Then the rest of your code 

Sidenote: Отображение ошибок не должно быть сделано только в постановке, и никогда производства.

  • Убедитесь, что ваша форма использует метод POST и что ваши входы все несут соответствующие атрибуты имени.

т.е .: name="Name" для массива POST $_POST['Name'] и т.д.

  • Обратите внимание, что Name и name 2 различных животных и являются чувствительными к регистру.
0

похоже, что пароль, который вы предоставляете для имени пользователя root, неверен, иногда корень localhost установлен на работу без пароля, поэтому вы можете попробовать его проверить с предоставлением $ password = ""; и если он возвращает ошибку, то вам нужно ввести правильный пароль для создания соединения