2015-09-10 4 views
4

Недавно я начал изучать webdevelopment, и для первого проекта мы должны сделать очень простую регистрационную функцию. теперь я где-то, но вдруг я начал получать эту ошибку.PHP MySQL не может перейти в строку 0

Невозможно, чтобы перейти к строке 0 на MySQL результате индекс 4.

Это код, где я получаю сообщение об ошибке.

$conn = mysql_connect($servername, $username, $password, $database) or die("!Server"); 

if(!$conn){ 
    die("Connection error: " . mysql_error()); 
}else{ 
    echo "connection made"; 
} 

$select_db= mysql_select_db($database, $conn); 

if(!$select_db){ 
    die("Database selection failed:: " . mysql_error()); 
}else{ 
    echo "database selected"; 
} 

$login_user = $_GET['username']; 
$select_password = "SELECT `password` FROM `members` WHERE `username` = '$login_user'"; 
$result = mysql_query($select_password); 

if(!$result){ 
    die("Could not fetch the data " . mysql_error()); 
} 

$password = mysql_result($result, 0); 

echo $password; 

Я знаю, что есть другие сообщения, задающие один и тот же вопрос, но ни один из них, где действительно полезно.

надеюсь, что кто-то сможет мне помочь.

Спасибо за чтение :)

+1

Запустите этот запрос непосредственно в базе данных и проверьте результат! –

+0

убедитесь, что '$ login_user' установлен перед тем, как ввести его в свой запрос. может быть использовано! empty() проверить перед запросом – jitendrapurohit

+2

Примечание: 'mysql_ *' функции устарели, они будут удалены из PHP в будущих версиях, и тогда ваш код перестанет работать. Вы не должны писать новый код, используя их, вместо этого используйте ['mysqli_ *' или PDO] (http://php.net/manual/en/mysqlinfo.api.choosing.php). –

ответ

4

Вполне возможно, что этот ряд:

password = mysql_result($result, 0); 

не удается получить количество строк, если это все, что именно поэтому вы получите сообщение об ошибке не совпадают.

Попробуйте вместо этого:

if($password = mysql_fetch_assoc($result)) { 
    echo $password['password']; 
} else { 
    echo 'no match'; 
} 

Смотрите, если это помогает.

Однако вам действительно нужно перейти от mysql_ * к PDO или mysqli.

+0

Это приведет к появлению сообщения об ошибке, если результаты не найдены. –

+0

Вы правы, и я изменил mysql_result на mysql_fetch_assoc, чтобы избежать ошибки. Спасибо за примечание. Просто скопируйте наклеенную неправильную часть. – NotJustin

-1

Изменить это:

$select_password = "SELECT `password` FROM `members` WHERE `username` = '$login_user'"; 

В это:

$select_password = "SELECT password FROM members WHERE username = '$login_user'"; 
+1

Почему это должно что-то изменить? – jmattheis

+0

Потому что вы сейчас смотрите в таблицы. Вы должны изучить данные в таблицах. – Gobbin

+0

Вы только удалили 'из запроса. это ничего не изменит. – jmattheis

3

Я предлагаю работать с PDO, вместо MySQL _... функций. Не только потому, что он новее и объектно-ориентированный, но и потому, что mysql ... устарел.
Так что я отвечаю с PDO

Из вашего примера кода Предполагаю, что у вас есть переменные servername, database, username & password. Таким образом, чтобы соединиться с PDO будет выглядеть следующим образом:

$con = new PDO("mysql:host=$servername;dbname=$database", $username, $password); 

После этого вы можете взять ваш параметр $ _GET с помощью filter_input, который также более предложили. Простой взгляд назначение, как это:

$login_user = filter_input(INPUT_GET,'username'); 

, а затем запустить & выборки запроса, как это:

$result_query = $con->query("SELECT `password` FROM `members` WHERE `username` = '$login_user'"); 
$result = $result_query->fetch(PDO::FETCH_ASSOC); 

Теперь $ результат представляет собой ассоциативный массив, поэтому, чтобы получить пароль просто использовать:

echo $result['password']; 
0

Спасибо за помощь :) из этих ответов я получил все, что мне было нужно, и теперь я также собираюсь переключиться на PDO для хотя я собираюсь остаться с MySQL на данный момент, так как я должен повернуть его в понедельник.

Спасибо alot :)

+0

Это не ответ на ваш вопрос Если один из ответов отражает ваше решение, отметьте его как решение. Вы можете поблагодарить в комментарии. –