|
|
|
|
|
для: Trianon
(11.05.2006 в 13:29)
| | 1) Я в курсе.
2) Да это так.
PS Я не выступаю против упрощения конструкций и языка, просто философия Perl - это философия Perl и она идёт в другую сторону, нежели PHP. Perl - это поэзия, утопия, попытка говорить языком машины с красотой и сложностью обычного языка. PHP - это инструмент и средство зарабатывания денег, вся романтика в нём от Perl (но в кастрированном и урезанном виде). Язык предназначен для решения задач, задачей PHP никогда не будет сочинение на нём стихов, а на Perl по этому поводу устраиваются конкурсы. В Perl - коммуна, в PHP - коммунити, которое развалится как только оно перестанет быть выгодным членам. | |
|
|
|
|
|
|
|
для: cheops
(11.05.2006 в 12:47)
| | Cheops, попробуйте выполнить вот такой скрипт:
<?
$a = 0; $b = 1; $c = 2; $d = 3;
$b = $a or $d = $c;
var_dump($b); var_dump($d);
$c = ($b = "Joy");
var_dump($c);
?>
|
а потом заменить or на || и выполнить его еще раз.
И Вы убедитесь, что
1. операция or отличается от операции || приоритетом. Первая по приоритету ниже операции = , а вторая выше. О чем, кстати, написано в мануале, здесь и здесь.
2. Операция присваивания возвращает значение своего правого аргумента. О чем написано здесь
Я согласен с Вами в том, что уважающий себя программист хакерских штучек должен избегать.
Но не согласен с тем, что можно называть хакерскими штучками, а что нельзя.
Если идти по Вашему пути, можно любой язык выхолостить до уровня сабсет-алгола.
То-то надежный код будет.... | |
|
|
|
|
|
|
|
для: mtxd
(11.05.2006 в 10:35)
| | Так писать не правильно, дело в том, что это перловские штучки - оператор or не вычисляет второй аргумент, если первый равен true. Когда мы пишем
Всё нормально, если mysql_query() возвращает дескриптор второй аргумент or - die() не вычисляется и программа продолжает работать, если возвращается NULL, второй оператор вычисляется и останавливает работу.
Если мы пишем
$res = mysql_query() or die()
|
то, даже в случае возникновения ошибки die() срабатывать не будет, так как or - имеет меньший приоритет чем =, а операция = всегда возвращает true, поэтому второй аргумент можно не вычислять.
PS Вообще or die() - пример самого дурного тона, так как мало того, предложение малочитабельное, провоцирует на ошибки - оно ещё зависит от реализации оператора or, т.е. нарушает инкапсуляцию. В Perl это простительно - это хакерский язык, сложная, запутанная программа, которая тем не менее работает - там доблесть, в PHP, который ориентируется на промышленный код, а следовательно, программы должный быть максимально надёжными и читабельными - таких хакерских штучек лучше избегать. | |
|
|
|
|
|
|
|
для: cheops
(11.05.2006 в 10:24)
| | >Так писать
>$request = mysql_query(".......") or die (mysql_error());
>нельзя, ....так как операция присваивания всегда даёт 1 и второй
>оператор or будет вычисляться всегда.
Это почему же? Операция присваивания даст то, что вернул mysql_query.
Если mysql_query вернул ошибку (т.е. false) то or даст выполнить вторую часть с диагностикой. | |
|
|
|
|
|
|
|
для: cheops
(11.05.2006 в 10:24)
| | >>>Так писать нельзя
Нельзя в смысле вообще нельзя, или это не правильно? У меня такая конструкция работает в нескольких местах, причем при возникновении ошибки делает то же самое, что и приведенный вами код. | |
|
|
|
|
|
|
|
для: Радосвет
(11.05.2006 в 02:08)
| | Так писать
<?php
$request = mysql_query("SELECT title_html,name FROM artpage WHERE id_artpage = ".$_GET['id_page']." LIMIT 1") or die (mysql_error());
?>
|
нельзя, либо так
<?php
mysql_query("SELECT title_html,name FROM artpage WHERE id_artpage = ".$_GET['id_page']." LIMIT 1") or die (mysql_error());
?>
|
либо так
<?php
$request = mysql_query("SELECT title_html,name FROM artpage WHERE id_artpage = ".$_GET['id_page']." LIMIT 1");
if(!$request) exit(mysql_error());
?>
|
Так как операция присваивания всегда даёт 1 и второй оператор or будет вычисляться всегда. | |
|
|
|
|
|
|
|
для: cheops
(11.05.2006 в 01:43)
| | cheops, спасибо! Я записал вот так:
<?php
$request = mysql_query("SELECT title_html,name FROM artpage WHERE id_artpage = ".$_GET['id_page']." LIMIT 1") or die (mysql_error());
if ($request)
{
$result = mysql_fetch_object($request);
$title = $result->title_html;
$ttl_name = $result->name;
}
?>
|
Но в данном случае на странице статьи (./doc/index.php?id_article=1) выводит вот что:
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 'LIMIT 1' at line 1
Убираю из функции код " or die (mysql_error()); " - всё работает! | |
|
|
|
|
|
|
|
для: Радосвет
(11.05.2006 в 01:10)
| | Строку
<?php
$request = mysql_query(SELECT title_html,name FROM artpage WHERE id_artpage = ".$_GET['id_page']." LIMIT 1";) or die (mysql_error());
?>
|
следует заменить на
<?php
$request = mysql_query("SELECT title_html,name FROM artpage WHERE id_artpage = ".$_GET['id_page']." LIMIT 1";) or die (mysql_error());
?>
|
| |
|
|
|
|
|
|
|
для: mtxd
(11.05.2006 в 00:45)
| | mtxd, спасибо за ответ, за советы! :)
Попробовал вот так: $title = mysql_result($pag); , выдаёт иную ошибку:
Warning: mysql_result() [function.mysql-result]: Unable to jump to row 0 on MySQL result index 3 in /home/site/public_html/doc/index.php on line 14
Warning: mysql_result() [function.mysql-result]: Unable to jump to row 0 on MySQL result index 4 in /home/site/public_html/doc/index.php on line 15
А вот этот код вообще синтаксическую ошибку выдаёт:
$request = mysql_query(SELECT title_html,name FROM artpage WHERE id_artpage = ".$_GET['id_page']." LIMIT 1";) or die (mysql_error());
if ($request) {
$result = mysql_fetch_object($request);
$title = $result->title_html;
$ttl_name = $result->name;
}
|
Ошибка в этой строке $request = mysql_query(SELECT title_html,name FROM artpage WHERE id_artpage = ".$_GET['id_page']." LIMIT 1";) or die (mysql_error());
Вообще, то что у меня - оно, может, и криво, но исправно работает вроде.. :) | |
|
|
|
|
|
|
|
для: Радосвет
(11.05.2006 в 00:20)
| | Суть в том, что зачем переходить в полю 0 если у тебя и так LIMIT 1?
Попробуй
$title = mysql_result($pag);
И проверка у тебя не даст правильного ответа, так как в $pag будет записано Resource #
Если я конечно правильно понял. Вообще криво как-то... почему не сделать так?
<?
$request = mysql_query(SELECT title_html,name FROM artpage WHERE id_artpage = ".$_GET['id_page']." LIMIT 1";) or die (mysql_error());
if ($request) {
$result = mysql_fetch_object($request);
$title = $result->title_html;
$ttl_name = $result->name;
}
?>
|
| |
|
|
|
|