2016-05-19 3 views
0

Все, что мне нужно, это создать строку. Я просмотрел все образцы, и я не могу на всю жизнь получить правильную информацию. Следовательно, помощь нужна пожалуйста.Не удается получить результат от mysql

Подключение к БД обычным способом. Вот мой код для запроса.

$sql = "SELECT * FROM table WHERE `u_password` = $pword AND `user` = $uname LIMIT 1"; 
$result = mysqli_query($mdb, $sql); 
$row = mysqli_fetch_assoc($result); 
//Then I try to retrieve say the user name.... 
echo $row['seeking']; 

У меня есть счет там и дает результат, равный 1. Ошибки я получаю «Предупреждение: mysqli_fetch_array() ожидает параметр 1, чтобы быть mysqli_result»

Помощь будет оценена.

+1

Если вы хотите отредактировать свой титул; название должно максимально точно описывать ваш вопрос, а не ваши личные чувства по этому вопросу. –

+0

Это пример, если бы вы использовали правильные подготовленные запросы, это сработало бы. – apokryfos

+1

Возможный дубликат [mysql \ _fetch \ _array()/mysql \ _fetch \ _assoc()/mysql \ _fetch \ _row() ожидает, что параметр 1 будет ресурсом или mysqli \ _result, boolean given] (http://stackoverflow.com/questions/2973202/mysql-fetch-array-mysql-fetch-assoc-mysql-fetch-row-expects-parameter-1-to) – Thamilan

ответ

2

Ошибка

Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result 

Почти всегда означает, что запрос не удалось по каким-то причинам, таким образом $result = mysqli_query возвращает FALSE, а не mysql_result объекта, так что все, что затем пытается использовать $result как объект не будет работать по понятным причинам ,

Проблема с запросом является то, что данные текстовых столбцов должны быть обернуты в кавычки, как этот

$sql = "SELECT * 
     FROM table 
     WHERE `u_password` = '$pword' AND `user` = '$uname' LIMIT 1"; 

Ваш сценарий подвергается риску SQL Injection Attack Посмотрите, что случилось с Little Bobby Tables Даже if you are escaping inputs, its not safe!

Чтобы избежать этого, вы должны использовать параметризованные запросы.

$sql = "SELECT * 
     FROM table 
     WHERE `u_password` = ? AND `user` = ? LIMIT 1"; 
$stmt = mysqli_prepare($mdb, $sql); 
// its also a good idea to check the staus of a prepare 
// and show the error if it failed, at least while testing 
if ($stmt === FALSE) { 
    echo mysqli_error($mdb); 
    exit; 
} 
$stmt->bind_param('ss', $pword, $uname); 
$stmt->execute(); 
$result = $stmt->get_result(); 
$row = $result->fetch_assoc(); 
echo $row['seeking']; 
+0

Вау, так быстро, спасибо ... ты прав .... позволь мне проверить .... – MikeIsMad

+0

Не смотрите на переменные '$ pword' Я обернул это в одинарные кавычки, такие как' '$ pword'' Вот одинарные кавычки и НЕ обратные ссылки – RiggsFolly

+0

yep, который работает, но он не будет повторять параметр« поиск ». – MikeIsMad

0

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

$sql = "SELECT * FROM table WHERE `u_password` = ? AND `user` = ? LIMIT 1"; 
$stmt = mysqli_prepare($mdb, $sql); 
$stmt->bind_param("ss",$pword,$uname); 

if ($stmt->execute()) { 
    $result = $stmt->get_result(); 
    $row = mysqli_fetch_assoc($result); 
    //Then I try to retrieve say the user name.... 
    echo $row['seeking']; 
} else { /* something went wrong */ } 
Смежные вопросы