Такой юзверь уже есть в базе

  • Автор темы sergo_stavropol
  • Дата начала

sergo_stavropol

Guest
Такой юзверь уже есть в базе

Хм, вроде все мне казалось до смешного простым

PHP:
$check = mysql_query("select user from table where user='$login'") || die("CHECK FAILED");
Затем если этот запрос не вернул мне строчку с этим юзером, то значит его нет в базе и можно делать INSERT

Но поскольку запрос не выдавал CHECK FAILED, значит, он возвращал пустой результат... В общем сначала попробовал:

PHP:
if($check==false)  {INSERT...}, 
if($check==NULL) {INSERT...}, 

$row=mysql_fetch_row($check); 
if(!$row[0]) {INSERT...} 

if(!mysql_fecth_row($check)) {INSERT...}
и ни один из варинтов не прокатил... почему?
 

sergo_stavropol

Guest
ха, то есть, если нет ни одной строки, удовлетворяющей моему запросу!

Премного благодарен, был неправ и недалек. :)
 

sergo_stavropol

Guest
[off]
Апокалипсис,
$city = "Russia/Novosibirsk/" прикольней было
[/off]
 

sergo_stavropol

Guest
раз уж тема mysql_num_rows() касается, не буду открывать новую, продолжу здесь, с вашего позволения
Просто нужда заставлет прояснить одну картину:


первое (скопировал с доки)

PHP:
$link = mysql_connect("localhost", "login", "password");
	mysql_select_db("basename", $link);

	$result = mysql_query("SELECT * FROM table WHERE user='$login' and password='$password'" , $link);
	$auth_num = mysql_num_rows($result);    

// работает, возвращает 1 строку

второе (писал сам пока не пришлось лезть в доку)
PHP:
$base = mysql_connect("localhost", "login", "password");
	mysql_select_db("basename", $link);

	$auth_sql = "SELECT * FROM table WHERE user='$login' and password='$password'"; 
                $auth = mysql_query($auth_sql, $base)
	$auth_num = mysql_num_rows($auth);    

// возващает варнинг supplied argument is not a valid MySQL result  resource
Я очень долго думал почему... вот, решил спросить здесь...
единственное что может лезть в голову так это то что переменные не так называются, но ведь наврядли причина может быть в том, что идентификатор ссылки я сложил в переменную $base, а не $link...

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

RomikChef

Guest
чтобы зря не думать, надо выводить сообщение об ошибке.
если тебе РНР пишет, что supplied argument is not a valid MySQL result resource, то это значит, что запрос, результат которого ты пытаешься обрабатывать, был выполнен С ОШИБКОЙ
(именно в этом, кстати, и была твоя ошибка в самом первом сообщении. mysql_query возвращает не количество строк, а указатель, РЕСУРС, который пустым будет только если была ошибка. ТОЛЬКО. ЕСЛИ. БЫЛА. ОШИБКА.)

поэтому надо писать, например, так:
$auth_sql = "SELECT * FROM table WHERE user='$login' and password='$password'";
if (!$auth_sql) echo mysql_error();
 

sergo_stavropol

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

RomikChef

Guest
во-первых, я ошибся
конечно же
$auth = mysql_query($auth_sql, $base) ;
if (!$auth) echo mysql_error();

от этой путаницы очень помогает единая система именования переменных.
$query="";
$result = mysql_query($query) ;
if (!$result) echo mysql_error();
разные имена давать бессмысленно.

во-вторых.
Давай мы не будем, как с тем чукотским студентом, повторять тебе, что "есть осибка", а ты не будешь спорить с фактами, хорошо?

Есть еще только один вариант такого поведения - как раз от путаницы в именовании переменных - результат запроса ты получаешь в одну, а обращаешься к другой.
Либо ошибка в запросе.
разберись, какой из них у тебя и доложи.
 

sergo_stavropol

Guest
Давай мы не будем, как с тем чукотским студентом, повторять тебе, что "есть осибка", а ты не будешь спорить с фактами, хорошо?
Конечно, согласен

от этой путаницы очень помогает единая система именования переменных.
а если, к примеру, в одном цикле нужно несколько запросов, и получить, соответственно, несколько результатов, а потом еще произвести над переменными, в которые результат сложился, какие-либо действия?
тогда ведь по-любому придется именовать result1, result2?
и в этом случае наверное как раз удобнее назвать переменную так, чтобы название ассоцировалось со смыслом результата? Я прав?

разберись, какой из них у тебя и доложи.
докладаю
Warning выводится, когда я пытаюсь проверить кривизну запроса, вызывая после него die()

PHP:
$result = mysql_query("SELECT * FROM table WHERE user='$username'", $link) || die("failed sql"); 
$num = mysql_num_rows($exists);   
echo $num; 
// Warning

PHP:
$result = mysql_query("SELECT * FROM table WHERE user='$username'", $link);
$num = mysql_num_rows($exists);  
echo $num; 
 // все  ништяк,  выводит кол-во строк в полученном   результате
Посмотрел примеры в мане - die() вполне используется с ф-ией die()
 

sergo_stavropol

Guest
видимо, есть тут что-то, если ты мне предлагаешь использовать mysql_error, а не die ...
 

RomikChef

Guest
$result = ...
$num = mysql_num_rows($exists);
я не знаю, что оно у тебя там выводит, но только не разультат выполнения запроса, который находится строчкой выше.

слушай, вот меня спрашивают - почему я такой злой?
да потому, что читатели тупые!

Ты внимательно выслушал меня, и допустил ОБЕ ошибки.
И к в запросе ошибка, и к результату не его обращаешься.

сказано тебе - mysql_error()!!!
а не "failed sql"




запомни, а лучше запиши:

чтобы увидеть ошибку в своем кривом запросе, надо выводить mysql_error()
чтобы увидеть ошибку в своем кривом запросе, надо выводить mysql_error()
чтобы увидеть ошибку в своем кривом запросе, надо выводить mysql_error()
чтобы увидеть ошибку в своем кривом запросе, надо выводить mysql_error()
чтобы увидеть ошибку в своем кривом запросе, надо выводить mysql_error()
чтобы увидеть ошибку в своем кривом запросе, надо выводить mysql_error()
чтобы увидеть ошибку в своем кривом запросе, надо выводить mysql_error()
чтобы увидеть ошибку в своем кривом запросе, надо выводить mysql_error()
чтобы увидеть ошибку в своем кривом запросе, надо выводить mysql_error()
чтобы увидеть ошибку в своем кривом запросе, надо выводить mysql_error()
чтобы увидеть ошибку в своем кривом запросе, надо выводить mysql_error()
чтобы увидеть ошибку в своем кривом запросе, надо выводить mysql_error()
чтобы увидеть ошибку в своем кривом запросе, надо выводить mysql_error()
чтобы увидеть ошибку в своем кривом запросе, надо выводить mysql_error()

не важно как - echo mysql_error(); или die(mysql_error()) или error_log(mysql_error()) - как хочешь выводи, хоть на матричном принтере печатай и заставляй секретаршу зачитывать тебе.
но только ВЫВОДИ!
 

sergo_stavropol

Guest
RomickChef,
я чудовищно ошибся когда при постинге переделывал имена переменных, и $exists заменил на $result не везде
В скрипте, конечно же, у меня везде $exists...

$exists = mysql_query("SELECT * FROM table WHERE user='$username'", $link) || die("failed sql");
$num = mysql_num_rows($exists);
echo $num;
// Warning

я понимаю твою злость, ты прав

ЗЫ
Я все записал :)
 

RomikChef

Guest
у тебя глюки.
ГДЕ я написал, что die лучше не использовать?
прочти последний абзац моего экспрессивного сообщения.

ЗЫ. честное слово - еще раз увижду это издевательство - код, в котором надо искать ошибку, и это не тот реальный код, который у тебя не работает, а код, который левая пятка набрала - то, честное слово - ЗАБАНЮ.
 

sergo_stavropol

Guest
А почему в мане написано

$result = mysql_query("SELECT * WHERE 1=1")
or die("Invalid query");

а не
or die(mysql_error())

я не буду спрашивать. Боюсь... ты же злой :)


И еще попрошу признать что я скорее суперневнимательный чем тупой (по крайней мере в этой теме)
 

RomikChef

Guest
короче.
у тебя в скрипте до сих пор чудовищные ошибки.
Warning выдает НЕ ЭТОТ запрос.
потому, что в этом коде до warninga дело НЕ ДОЙДЕТ.
скрипт умрет по die();

закрой окно с форумом.
попей чайку.
поспи.
а потом встань, и найди у себя в программе опечатку, которая ни к mysql ни к РНР никакого отношения не имеет.
 

sergo_stavropol

Guest
RomikChef

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

(ничего не меняю)

1)
PHP:
$exists = mysql_query("SELECT * FROM toto_pass WHERE user='$username'", $link) || die("Invalid Query"); 
// извини что не mysql_error, я же ничего не меняю
$exists_num = mysql_num_rows($exists); 
echo $exists_num;
2)
PHP:
$exists = mysql_query("SELECT * FROM toto_pass WHERE user='$username'", $link);
if(!$exists) echo mysql_error(); 
$exists_num = mysql_num_rows($exists); 
echo $exists_num;
 

sergo_stavropol

Guest
пока не отвечай, я пойду лучше кофейку дерябну
 

RomikChef

Guest
насчет тупости все решает твой последний вопрос.
в котором ни капли логики.
а почему в мане не может быть написано invalid query? Это как-то ПРОТИВОРЕЧИТ выводу mysql_error?
и то и другое - сообщение об ошибке.
в мане написано лаконичное, mysql_error() - более подробное.
оно там не обязано быть, поскольку это всего лишь один из вариантов. потому, что это не пример написания реальных программ, а просто пример пользования функцией.
В мане очень много чего НЕ НАПИСАНО. Это ман - описание команд, а не собрание программ на все случаи жизни.

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

RomikChef

Guest
давным-давно надо было сделать echo $exists; в обоих случаях. это азы отладки.
 
Сверху