2015-03-08 3 views
-1

У меня есть следующий скрипт с проблемой SQL, которая не работает.MySQL запрос не получать результаты (PHP)

<?php 
$servername = "localhost"; 
$username = "root"; 
$password = "root"; 
$dbname = "Freepaste"; 
$conn = mysqli_connect($servername, $username, $password,$dbname); 

if (!$conn) { 
    die("Connection failed: " . mysqli_connect_error()); 
} 
echo "Connected successfully"; 
$user = $_POST['user']; 
$pass = $_POST['pass']; 

echo $user." ".$pass; 

$stmt = $conn->prepare("SELECT * FROM users where users.username= ? AND users.password = ?"); 
$stmt->bind_param('ss', $user, $pass); 
$stmt->execute(); 
$result = $stmt->get_result(); 
printf("Errormessage: %s\n", $mysqli->error);; 

if (mysqli_num_rows($result) > 0) { 
    // output data of each row 
    while($row = mysqli_fetch_assoc($result)) { 
     echo "<br>id: " . $row["username"]." Password ".$row["password"]. "<br>"; 
    } 
} 
else { 
    echo "<br>0 results <br>"; 
    printf("Errormessage: %s\n", $mysqli->error); 
} 

mysqli_close($conn); 
?> 

Утверждение без предложения «где» дает мне все результаты, поэтому я знаю, что ключи правильные. Кроме того, я запускал запрос в MySQL, и он работает нормально. Я попытался добавить "" в $ пользователь и $ pass, все еще не работает. Я проверил имена в HTML, они тоже правильные. Что мне не хватает?

Вот ссылка на HTML: http://pastebin.com/CWLuafVq

+0

Отправленный весь код. Любая помощь будет оценена. – goelakash

ответ

1

Вы пропускаете цитаты (хотя вы говорите, вы пробовали) я думаю, что это должно было сработать. Ваш запрос должен быть:

SELECT * FROM users where users.username='$user' AND users.password='$pass' 

Ваш запрос становится уязвимым для инъекции SQL и для того, чтобы избежать этого (и избежать хлопот, как требует кавычки в SQL заявление), следует использовать PreparedStatement.

+0

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

+0

Жаль, что я вас обидел. Я понял свою ошибку и разместил весь код. Пожалуйста, я новичок, но не лжец. Я хотел сказать, что знаю, что одиночные кавычки должны работать, но это не так. Такие ошибки, которые затрудняют жизнь. – goelakash

+0

@goelakash Я думаю, что вы не понимаете, какие подготовленные заявления есть, поскольку в вашем вопросе еще нет ни одного вопроса.Проверьте ссылку в ответе, который я дал. – rjdown

1

Как указано, когда ваши переменные помещаются в sql-запрос, он выглядит следующим образом: WHERE users.username=goelakash AN.... Без кавычек вокруг имени пользователя и пароля mysql будет думать, что вы сравниваете два столбца.

Возможно, это ваш запрос.

$sql = "SELECT * FROM users where users.username=\"$user\" AND users.password=\"$pass\""; 

Сделайте себе огромную пользу, и put mysqli_error() calls после ваших звонков mysqli_query(). Они расскажут вам, о чем плачет mysql.

Следует также отметить, что ваши запросы открыты для ввода в sql, и вы должны взглянуть на prepared statements, чтобы смягчить это.

1

Для вашего примера вам просто нужно поставить одинарные кавычки вокруг $ user и $ pass в запросе.

BUT !!!!!! Ваш запрос открыт для SQL-инъекции. Вы должны изменить способ написания запросов. Вместо этого используйте связанные параметры, тогда вы можете почти забыть об этой проблеме.

Пример:

$stmt = $conn->prepare("SELECT * FROM users where users.username= ? AND users.password = ?"); 
$stmt->bind_param('ss', $user, $pass); 
$stmt->execute(); 
$result = $stmt->get_result(); 

См here для получения дополнительной информации

1

убедитесь, что ваш пароль базы данных 'корень'? Если да, то следуйте строке запроса

$sql = "SELECT * FROM users WHERE users.username='$user' AND users.password='$pass'"; 

просто замените его. Я думаю, что он будет работать нормально :)

Смежные вопросы