mysli заявка - странен проблем

Blackmailer

Registered
PHP:
$checkID = mysqli_query($con ,("SELECT id from table WHERE id= '$id'"));
						
						if (!$checkD) {
							die('Не може да изпълни заявката.');
						}
						
						if (mysqli_num_rows($checkID) > 0) {
							
							
						}
						
						else {
							$result = mysqli_query($con, ("INSERT into table (name, text, title) VALUES 
							('".$id."','".$text."','".$title."')"));
	
							//$result = mysqli_query($con, $query);
							
							if($result)
							{
								mysqli_affected_rows($con);	
								
							}
							
							else
							{
								echo 'Не може да добави в базата данни.';	
							}	
						}
}
 
Поне да го беше по-подредил малко тоя код :Д

Имаш празни if-ове (+излищни скоби и кавички), които само пълнят кода ти с редове.
Замести кода си с този и дай output-a:

PHP:
$checkID = mysqli_query($con ,("SELECT id from table WHERE id= '$id'"));

if (mysqli_num_rows($checkD) === 0) {
	die('Не може да изпълни заявката.');
}

if (mysqli_num_rows($checkID) === 0) {
	$result = mysqli_query($con, "INSERT into table (name, text, title) VALUES 
('$id','$text','$title')") or die(mysqli_error());
	echo 'affected rows: ', mysqli_affected_rows($result).'<br>';
}
 
Не може да изпълни заявката.

Интересното е, че доскоро работеше, а изведнъж се прецака без да съм бутал нищо. Някакви идеи ?
 
най лесно става да изкараш самия селект, да влезнеш в php admin-a И да изпълниш ръчно селекта за да видиш какво ти искарва и дали изкарва нещо:

echo "SELECT id from table WHERE id= '$id'";

всимаш и изпълняваш :)
 
Blackmailer каза:
Не може да изпълни заявката.

Интересното е, че доскоро работеше, а изведнъж се прецака без да съм бутал нищо. Някакви идеи ?
Извинявай, разменил съм местата по погрешка.
Направи първия if така:

mysqli_num_rows($checkD) !== 0
 
anonimen каза:
Blackmailer каза:
Не може да изпълни заявката.

Интересното е, че доскоро работеше, а изведнъж се прецака без да съм бутал нищо. Някакви идеи ?
Извинявай, разменил съм местата по погрешка.
Направи първия if така:

mysqli_num_rows($checkD) !== 0

пак Не може да изпълни заяката
 
То сега изкарва че не е изпълнило заявката когато я е изпълнило. А преди беше обратното.

PHP:
//ако има грешка, ще я изкара
$checkID = mysqli_query($con ,("SELECT id from table WHERE id= '$id'")) or die('Грешка при селекта! '.mysqli_error($con));

// ако е намерен ред с id=$id, приключваме
if (mysqli_num_rows($checkD)) {
        die('Намерен е съответстващ ред! Няма ъпдейт!');
}

//ако има грешка при ъпдейта, ще я изкара
$result = mysqli_query($con, "INSERT into table (name, text, title) VALUES 
('$id','$text','$title')") or die('Грешка при ъпдейта! '.mysqli_error($con));
//ако няма, ще изкара броя на ъпдейтнатите редова. Ако работи правилно ще върне '1'
echo 'affected rows: ', mysqli_affected_rows($result).'<br>';
 
Идеята на скрипта е да провери дали има такъв запис в бд, ако няма да го добави и да продължи проверката до края на записите.
 
Blackmailer каза:
Идеята на скрипта е да провери дали има такъв запис в бд, ако няма да го добави и да продължи проверката до края на записите.
Така?
PHP:
//първо проверяваме за ред с id='$id'
$checkID = mysqli_query($con ,("SELECT id from table WHERE id= '$id'")) ;

//ако няма ред - инсертваме
if (!mysqli_num_rows($checkD)) {
    $result = mysqli_query($con,
"INSERT into table (name, text, title) VALUES ('$id','$text','$title')"
    ) or die(mysqli_error($con));
    if(mysqli_affected_rows($result) === 0) {
        echo "Неуспешен ъпдейт!";
    }
    else {
        echo 'успешен ъпдейт! affected rows: ', mysqli_affected_rows($result);
    }
}
else {
    echo 'Има ред в бд-то => без ъпдейт!';
}
 
Warning: mysqli_error() expects exactly 1 parameter, 0 given in
и отново не добави единия запис в дб , при който чупеше и с предния код...
 
Ето го работещия код, благодаря много за помощта!


PHP:
//първо проверяваме за ред с id='$id'

$checkID = mysqli_query($con ,("SELECT id from table WHERE id= '$id'")) ;



//ако няма ред - инсертваме

if (!mysqli_num_rows($checkD)) {

    $result = mysqli_query($con,

"INSERT into table (name, text, title) VALUES ('$id','$text','$title')"

    );

    if(mysqli_affected_rows($con) === 0) {

        echo "Неуспешен ъпдейт!";

    }

    else {

        echo 'успешен ъпдейт! affected rows: ', mysqli_affected_rows($con);

    }

}

else {

    echo 'Има ред в бд-то => без ъпдейт!';

}
 
Да, бях забравил, че mysqli_affected_rows използва конекцията към бд, а не резултат от заявката. Все пак си мисля, че трябва да е така - все пак връща "афектираните" редове от конкретна заяква.
 
Отново се появи този проблем, явно на случаен принцип чупи кода. На няколко от записите ми изкара:

успешен ъпдейт! affected rows: -1
 
Blackmailer каза:
Отново се появи този проблем, явно на случаен принцип чупи кода. На няколко от записите ми изкара:

успешен ъпдейт! affected rows: -1
Това е защото заявката ти е гръмнала. Затова се използва
PHP:
or die(mysqli_error($con));
при всяка заявка - до изчистване на грешките, естествено.Какво ти връща като добавиш горния ред към заявката?
 
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near "Заглавие" at line 2
 
Blackmailer каза:
Проблемът са ' ' тези знаци в заглавието кодът чупи...

Е ти никва защита ли не си сложил на $text и $title!
Преди заявката сложи

$title = addslashes($title);
$text = addslashes($text);
$id = (int) $id;
 
Blackmailer каза:
разкарах ги addslashes, защото не зная как да оправя това:

Tom's car.
Tom\'s car. --> това е с addslashes
Да, реалните стрингове са такива, но при вмъкване в базата данни се оправят. Не се тревожи за това. :?:

пс - като ги махнеш ще се появят отново онези грешки. Именно затова се използат (addslashes).
 

Back
Горе