Функции в условията на конструкции и цикли

nbacool2

Registered
Здравейте ако имам следниа код:
$sql = "INSERT INTO articles (subcategory_id, Date)
VALUES ( '" . $subcategory . "', '" . $datetime . "')";
$sql_insert = mysql_query($sql) or die("Възникна грешка:" . mysql_error());
if (mysql_query($sql)) {
....................................

При изпълнението на if-конструкцията mysql_query($sql) ще се изпълни ли отново? Питам, защото подобно нещо става при задаването в while цикъл
например
<?php
$row = mysql_assoc($query);
while ($row = mysql_assoc($query) {
.....................
}

ще изпълни mysql_assoc($query) два пъти.

Ако можете дайте примери за различни конструкции и цикли.
 
Най лесно е да си преведеш думите.
if (ако) нещо става.
while (докато) нещо става.
В горния случай if(ако) се изпълни заявката ... прави нещо на мястото на точките.
А това while ($row = mysql_assoc($query) { ...} (докато) има записи в $query ще се пълни $row.
 
Разбира се, че ще се повтори заявката, защото извикваш два пъти функцията..
Защо е нужно да викаш отново функцията mysql_query, за да провериш дали заявката е била успешна?
Имаш два варианта:

Виж, че ти в кода си задаваш резултата на mysql_query на променливата $sql_insert. Просто след това проверяваш резултата, който съдържа променливата, вместо да извикваш функцията отново..
PHP:
$sql_insert = mysql_query($sql) or die("Възникна грешка:" . mysql_error());
if ($sql_insert) {
// ....

Вторият вариант е директно в if условието да извикаш функцията, без преди това да я извикваш:
PHP:
$sql = '....';
if (mysql_query($sql)){
// ....
 
Значи ако в условието има mysql_query($sql) ще се изпълни, а ако проверявам променливата, която съдържа mysql_query($sql) няма да се изпълни, така ли? Ако това е вярно значи променливата, на която и е присвоена стойността mysql_query($sql) ще съдържа булева стойност.
 
nbacool2 каза:
Значи ако в условието има mysql_query($sql) ще се изпълни, а ако проверявам променливата, която съдържа mysql_query($sql) няма да се изпълни, така ли? Ако това е вярно значи променливата, на която и е присвоена стойността mysql_query($sql) ще съдържа булева стойност.
Точно.
 
nbacool2 каза:
Значи ако в условието има mysql_query($sql) ще се изпълни, а ако проверявам променливата, която съдържа mysql_query($sql) няма да се изпълни, така ли? Ако това е вярно значи променливата, на която и е присвоена стойността mysql_query($sql) ще съдържа булева стойност.

Има една единствена булева стойност, и това е FALSE, когато заявката не се изпълни, иначе връща ресурс, а когато има ресурс условието се приема за вярно и продължава. Не е лоша практика да проверяваш с is_resource()

Хора, хубаво е да четете документацията, дори и само като справочник. Хората ясно са написали всяка функция какво връща.
 
relax4o каза:
nbacool2 каза:
Значи ако в условието има mysql_query($sql) ще се изпълни, а ако проверявам променливата, която съдържа mysql_query($sql) няма да се изпълни, така ли? Ако това е вярно значи променливата, на която и е присвоена стойността mysql_query($sql) ще съдържа булева стойност.

Има една единствена булева стойност, и това е FALSE, когато заявката не се изпълни, иначе връща ресурс, а когато има ресурс условието се приема за вярно и продължава. Не е лоша практика да проверяваш с is_resource()

Хора, хубаво е да четете документацията, дори и само като справочник. Хората ясно са написали всяка функция какво връща.

Не, тук грешиш. Връща true, дори и да не е в условие.

For other type of SQL statements, INSERT, UPDATE, DELETE, DROP, etc, mysql_query() returns TRUE on success or FALSE on error.
 
Подкрепям relax4o в съвета му да се чете документацията, защото повярвайте, РНР има една от най-разбираемите и пълни инструкции. Доста голяма част е преведена и на Български език от група ентусиасти:

http://www.php.net/manual/bg/function.mysql-query.php
 
Благодаря ви за отговорите. Всички ми помогнахте, но най-много F1r3Fl3x и точката отива при него.
 

Back
Горе