Php. Как копировать ресурс?

12
T
На сайте с 23.11.2005
Offline
298
1566

Вот такой код

$result = mysql_query("select x, y from table",$conn);

$result_copy = mysql_query("select x, y from table",$conn);

который, т.к. table - таблица динамическая и между запросами могло произойти изменение, не всегда будет возвращать одинаковые ресурсы

$result и $result_copy, нужно заменить правильным кодом.

Естественно, вот такой код работать не будет:

$result = mysql_query("select x, y from table",$conn);

$result_copy = $result;

А как сделать копию ресурса правильно? clone не предлагать, т.к. php версия номер 4.

KO
На сайте с 19.11.2005
Offline
56
#1

Попробуйте такой код:


mysql_query("LOCK TABLES table READ");
$result = mysql_query("select x, y from table",$conn);
$result_copy = mysql_query("select x, y from table",$conn);
mysql_query("UNLOCK TABLES");
T
На сайте с 23.11.2005
Offline
298
#2

Не хотелось бы блокировать таблицы.

KO
На сайте с 19.11.2005
Offline
56
#3

Такой код:


$result = mysql_query("select x, y from table",$conn);
$result_copy = $result;

Работает точно так же как и


$result = mysql_query("select x, y from table",$conn);
$result_copy = clone $result;

Так что clone тоже не подходит..

[Удален]
#4

А как на счёт

CREATE TEMPORARY TABLE 'temp' SELECT x, y FROM 'table'
M
На сайте с 27.07.2004
Offline
49
#5

а что вам мешает занести результаты первого селекта в массив и работать уже с этим массивом

может не правильно понял вопрос, не могу представить ситуацию когда необходимо использовать один и тот же ресурс от запроса к БД несколько раз

T
На сайте с 23.11.2005
Offline
298
#6
maxidesk:
а что вам мешает занести результаты первого селекта в массив и работать уже с этим массивом
может не правильно понял вопрос, не могу представить ситуацию когда необходимо использовать один и тот же ресурс от запроса к БД несколько раз

Согласен с Вами, наверное, нужно сбросить объект в массив. Все гениальное просто - сейчас так и сделаю, а ситуация такая - приходится дважды делать цикл mysql_fetch_array по ресурсу.

T
На сайте с 23.11.2005
Offline
298
#7

Теперь вместо

$result = mysql_query("select x, y from table",$conn);

$result_copy = mysql_query("select x, y from table",$conn);

я сделал так:

$result = mysql_query("select x, y from table",$conn);

$c = mysql_numrows($result);

for ($i = 0; $i < $c; $i++) $arr[$i] = mysql_fetch_array($result);

И теперь спокойненько работаю с массивом $arr[$i], рассматривая его, как $arr[$i]["x"] и $arr[$i]["y"].

Спасибо за совет про массив. Я бы плюс Вам поставил, да не знаю, как это сделать. :-)

M
На сайте с 27.07.2004
Offline
49
#8
Thanx:
Я бы плюс Вам поставил, да не знаю, как это сделать. :-)

спасибо

кстати можно обойтись одной строчкой

while ($arr[] = mysql_fetch_array($res));

только учтите используя так mysql_fetch_array у вас получается массив вида


Array
(
[0] => Array
(
[0] => 1
[x] => 1
[1] => 90
[y] => 90
)
)

немного избыточно

T
На сайте с 23.11.2005
Offline
298
#9

Учту Ваш код с помощью while на будущее.

Array

(

[0] => Array

(

[0] => 1

[x] => 1

[1] => 90

[y] => 90

)

)

Да, именно такого вида массив и получается. Действительно - избыточно.

Однако я рад, по-крайней мере тому, что ушел от двойного mysql_query, который мог производить не только избыточность, но и ошибки!

Спасибо за советы.

KO
На сайте с 19.11.2005
Offline
56
#10

Да, именно такого вида массив и получается. Действительно - избыточно.

Можно использовать mysql_fetch_assoc(), хотя вы наверно и так это знаете :)

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий