Хорошо, я возьму на это удар. Python проходит по ссылке объекта, которая отличается от того, что вы обычно считаете «по ссылке» или «по значению». Возьмем этот пример:
def foo(x):
print x
bar = 'some value'
foo(bar)
Итак, вы создаете строковый объект со значением «некоторое значение» и «привязываете» его к переменной с именем bar
. В C это будет похоже на bar
, являющимся указателем на «некоторое значение».
Когда вы вызываете foo(bar)
, вы не переходите в bar
. Вы передаете значение bar
: указатель на «некоторое значение». В этот момент есть два «указателя» на один и тот же строковый объект.
Теперь сравните это с:
def foo(x):
x = 'another value'
print x
bar = 'some value'
foo(bar)
Вот где разница. В строке:
x = 'another value'
вы фактически не изменяете содержимое x
. На самом деле это даже невозможно. Вместо этого вы создаете новый строковый объект со значением «другое значение». Этот оператор присваивания? Он не говорит, что «перезаписывает вещь x
указывает на новое значение». Он говорит «обновить x
, чтобы вместо этого указать на новый объект». После этой строки есть два строковых объекта: «некоторое значение» (с указанием bar
, указывающее на него) и «другое значение» (при этом x
указывает на него).
Это не неуклюжие , Когда вы понимаете, как это работает, это красиво элегантная, эффективная система.
Согласно вашему комментарию, вы не можете использовать LIMIT
перед WHERE
пунктом
SELECT * FROM sub_category WHERE limit 3 cat_id=".$row['cat_id']
Это должно быть:
SELECT * FROM sub_category WHERE cat_id=".$row['cat_id']." LIMIT 3";
Формирование должно быть: [1111 ]
SELECT
FROM
WHERE
LIMIT
Примечание: Но это вернет 3 записи, а не последние 3 записи.