SQLinfo.ru - Все о MySQL Webew.ru: теория и практика веб-технологий

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 15.01.2009 11:56:36

GRoM
Участник
Откуда: fileemail.ru
Зарегистрирован: 15.01.2009
Сообщений: 9

Сложить поле с самим собой на PHP

Скрипт на PHP, ниже полный код файлика. В config.php - учетные данные для конекта к базе.
В базе таблица login с полем prem_bait (bigint(20))

<?php

$query_add='UPDATE `login` SET `login`.`prem_bait`= login`.`prem_bait`+`login`.`prem_bait`+`login`.`prem_bait`+`login`.`prem_bait`';   

или       
$query_add='UPDATE `login` SET `prem_bait`=`prem_bait`+`prem_bait`+`prem_bait`+`prem_bait`';


    include("config.php");

    $connection = mysql_connect("$server", "$db_user", "$db_pass");
    $db = mysql_select_db("$database", $connection);
    $result = mysql_query($query_add, $connection);
    mysql_close($connection);
?>

В поле prem_bait (через phpMyAdmin) выставляю значение 5 . Легко подсчитать что должно получиться 20. Но после выполнения скрипта в поле prem_bait стоит значение 80 .

Если я выполняю этот же запрос через phpMyAdmin то всё нормально, выводится 20 как и положено.


Помогите разобраться. Чувствую что где-то что-то проглядел а вот где - непойму.

Неактивен

 

#2 15.01.2009 12:38:55

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Сложить поле с самим собой на PHP

Может быть скрипт выполнился дважды?

Неактивен

 

#3 15.01.2009 13:08:58

GRoM
Участник
Откуда: fileemail.ru
Зарегистрирован: 15.01.2009
Сообщений: 9

Re: Сложить поле с самим собой на PHP

rgbeast написал:

Может быть скрипт выполнился дважды?

Нет.
Я же написал что это один файлик. Вот после обращения к нему...

Для чистоты эксперимента smile запрос сделал вида:
$query_add='UPDATE `login` SET `prem_bait`=`prem_bait`+`prem_bait`+`prem_bait`+`prem_bait`+`prem_bait`';
то есть добавил один раз сложение.
После выполнения запроса теперь в поле 125

$query_add='UPDATE `login` SET `prem_bait`=`prem_bait`+`prem_bait`+`prem_bait`+`prem_bait`+`prem_bait`+`prem_bait`';
в поле 180

$query_add='UPDATE `login` SET `prem_bait`=`prem_bait`+`prem_bait`+`prem_bait`+`prem_bait`+`prem_bait`+`prem_bait`+`prem_bait`';
в поле 245

НЕ может же от количества раз сложения меняться количество выполнений скрипта (именно по коду скрипта из первого поста)

Неактивен

 

#4 15.01.2009 13:11:32

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Сложить поле с самим собой на PHP

Все говорит о том, что скрипт выполняется именно дважды.

1. умножение на 5. 5*5=25; второй шаг 25*5=125
2. умножение на 6. 5*6=30; второй шаг 30*6=180
3. умножение на 7. 5*7=35; второй шаг 35*7=245

Неактивен

 

#5 15.01.2009 13:38:09

GRoM
Участник
Откуда: fileemail.ru
Зарегистрирован: 15.01.2009
Сообщений: 9

Re: Сложить поле с самим собой на PHP

Полностью согласен!!! Именно так очень похоже.
Но, уверяю Вас.
Есть только один файлик с этим кодом

<?php
$server = "localhost"; // MySQL server
$db_user = 'grom'; // MySQL user
$db_pass = '1111111'; // MySQL user's password
$database = 'baza'; // MySQL database

$query_add='UPDATE `login` SET `prem_bait`=`prem_bait`+`prem_bait`+`prem_bait`+`prem_bait`+`prem_bait`+`prem_bait`+`prem_bait`';       


    $connection = mysql_connect("$server", "$db_user", "$db_pass");
    $db = 1;
    mysql_select_db("$database", $connection);
    $result = mysql_query($query_add, $connection);
    mysql_close($connection);

    echo '<hr>';
    echo $query_add;
    echo '<hr>';
?>

Не могу же я пол дня нажимать дважды и потом ещё всем парить мозги.

Отредактированно GRoM (15.01.2009 13:39:29)

Неактивен

 

#6 15.01.2009 13:43:38

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Сложить поле с самим собой на PHP

Сделайте отдельную таблицу CREATE TABLE myaccess ( atime TIMESTAMP); и добавьте в скрипт mysql_query("INSERT INTO myaccess VALUES (NULL)");

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

Неактивен

 

#7 15.01.2009 13:49:47

GRoM
Участник
Откуда: fileemail.ru
Зарегистрирован: 15.01.2009
Сообщений: 9

Re: Сложить поле с самим собой на PHP

Изменил скрипт:
<?php
$server = "localhost"; // MySQL server
$db_user = 'grom_s'; // MySQL user
$db_pass = '159753'; // MySQL user's password
$database = 'servis'; // MySQL database

$query_add='UPDATE `login` SET `prem_bait`=`prem_bait`+`prem_bait`+`prem_bait`+`prem_bait`+`prem_bait`+`prem_bait`+`prem_bait`';       


    $connection = mysql_connect("$server", "$db_user", "$db_pass");
    $db = 1;
    mysql_select_db("$database", $connection);
    $result = mysql_query($query_add, $connection);


$query = 'SELECT * FROM `login` WHERE 1';
$result = mysql_query($query, $connection);

    while ($rows = mysql_fetch_array($result))
    {
        echo '<br>Результат: '.$rows['prem_bait'];
    }

    mysql_close($connection);

    echo '<hr>';
    echo $query_add;
    echo '<hr>';
?>

В результате выводит:

Результат: 35
UPDATE `login` SET `prem_bait`=`prem_bait`+`prem_bait`+`prem_bait`+`prem_bait`+`prem_bait`+`prem_bait`+`prem_bait`

больше ни чего не выводит, что может свидетельствовать о выполнении скрипта только  1 раз.
После как захожу через пхпадмин - естественно стоит 245

Неактивен

 

#8 15.01.2009 13:51:58

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Сложить поле с самим собой на PHP

Второе выполнение скрипта могло быть после первого, поэтому Вы видите правильный ответ, а потом скрипт выполняется еще раз вне браузера. Сделайте все же как написано в после #6.

Неактивен

 

#9 15.01.2009 13:54:04

GRoM
Участник
Откуда: fileemail.ru
Зарегистрирован: 15.01.2009
Сообщений: 9

Re: Сложить поле с самим собой на PHP

Да, вы правы!
Выполнил этот скрипт с другого браузера - всё нормально. Теперь понятно куда копать...

Спасибо!!!

Неактивен

 

#10 15.01.2009 14:09:14

GRoM
Участник
Откуда: fileemail.ru
Зарегистрирован: 15.01.2009
Сообщений: 9

Re: Сложить поле с самим собой на PHP

Всё гениальное просто!

Плагин YSlow в мозиле стоял с автозагрузкой и обращался второй раз к скрипту...
Просто выключил.

Спасибо ещё раз.

Неактивен

 

#11 15.01.2009 14:12:02

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Сложить поле с самим собой на PHP

GRoM написал:

Плагин YSlow в мозиле стоял с автозагрузкой и обращался второй раз к скрипту...

Хороший плагин с говорящим названием. Он занимается тем, что замедляет работу инета?

Неактивен

 

#12 15.01.2009 14:27:05

GRoM
Участник
Откуда: fileemail.ru
Зарегистрирован: 15.01.2009
Сообщений: 9

Re: Сложить поле с самим собой на PHP

smile
Немного замедляет работу...
Нужен для отладки страниц сайта.
Работает в паре с Firebug, тоже для отлова ошибок.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson