#php
Доброго времени. Сейчас работал с базой и озадачился вопросом: $db_res = sqlite_open( $db_name ) || die ("Ошибка при открытии БД!" ); $query = sqlite_query($db_res, "SELECT * FROM $table") || die ('Ошибка в запросе!'); При использовании "|| die()" получаю ошибку Warning: sqlite_query() expects parameter 1 to be resource, string given in ... on line ... Ошибка в запросе! Если изменить оператор "||" на "or" все работает правильно, почему?
Ответы
Ответ 1
Дело в том, что оператор || имеет более высокий приоритет, чем оператор =, по этому $db_res будет присвоен результат выражения sqlite_open( $db_name ) || die ("Ошибка при открытии БД!" ), т.е. true. Оператор or наоборот имеет более низкий приоритет, чем =, следовательно сначала $db_res будет присвоен результат sqlite_open( $db_name ) и только потом будет применено логическое ИЛИ: $db_res || die ("Ошибка при открытии БД!" ) Т.е. если явно расставить приоритеты, то оба выражения будут выглядеть так: $db_res = ( sqlite_open( $db_name ) || die ("Ошибка при открытии БД!" ) ); ( $db_res = sqlite_open( $db_name ) ) or die ("Ошибка при открытии БД!" );Ответ 2
А соглашения о программировании говорят об приоритете использования операторов OR и AND перед || и &&. Так что я советую использовать буквенный вариант.
Комментариев нет:
Отправить комментарий