За последние 24 часа нас посетили 49637 программистов и 1691 робот. Сейчас ищут 1014 программистов ...

mysql Update

Тема в разделе "PHP для новичков", создана пользователем IvanK, 22 июн 2016.

  1. IvanK

    IvanK Новичок

    С нами с:
    7 июн 2016
    Сообщения:
    20
    Симпатии:
    0
    Подскажите плз нубу, что значит выражение
    PHP:
    1. SET 'user_email'='{$user_email}'".$newpass." WHERE
    . С SET и WHERE все понятно, не ясно, что за конструкция
    PHP:
    1. 'user_email'='{$user_email}'".$newpass."
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Ну вообще-то там скорее всего ошибка.
    SET `user_email`='{$user_email}'".$newpass." WHERE

    А вообще это значит следующее:
    {$user_email} - значение переменной подставляется в строку. Строка с двойными кавычками в пхп позволяет встраивать в неё значения переменных. Фигурные скобки во многих языках экранируют переменную, например, от следом идущего текста.
    Ну а $newpass - значение переменной поставляется в строку через конкатенацию. То есть сначала одна строка (в которую встроим юзер_имейл), потом значение этой переменной и потом далее другая строка.
     
    IvanK нравится это.
  3. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    @IvanK больше кода, будет понятнее
     
  4. rodent90

    rodent90 Новичок

    С нами с:
    26 мар 2015
    Сообщения:
    533
    Симпатии:
    37
    Возможно ошибки нет, если там используется, что - то подобное:.
    PHP:
    1. $newpass = $password ? " `password`='{$password}'":'';
    Только зачем хз.
     
  5. IvanK

    IvanK Новичок

    С нами с:
    7 июн 2016
    Сообщения:
    20
    Симпатии:
    0
    Спасибо за ответ! Правда, не все понял..Ошибка была - просто я код адаптирую для osclass, там свой движок для работы с базой, поэтому кавычки ` заменяю на ' по ходу дела, т.к. в итоге должно получиться что-то типа
    PHP:
    1. $aSkyCom = array('user_email' =>'$user_email'".$newpass.") //вот тут и застрял
    2. skyCom::newInstance() -> update($aSkyCom,array('user_id' =>$_SESSION['ses_user']));
    А вот запрос:
    PHP:
    1. mysql_query("UPDATE 'skyusers' SET 'user_email'='{$user_email}'".$newpass." WHERE 'user_id'='{$_SESSION['ses_user']}'",$db) or die(mysql_error());
    получается сначала обновляется значение ячейки user_email в базе, а затем значение ячейки, записанное в $newpass ??
    Чтоб уж совсем для ясности:
    PHP:
    1. function update($values, $where)
    2.         {          
    3.             $this->dao->from($this->getTableName());
    4.             $this->dao->set($values);
    5.             $this->dao->where($where);
    6.             return $this->dao->update();
    7.           }
     
  6. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    это же нарушает синтаксис языка MySql
     
  7. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    ошибка в кавычках. имена полей в апострофы обрамлены, а должны быть грависы.
     
  8. IvanK

    IvanK Новичок

    С нами с:
    7 июн 2016
    Сообщения:
    20
    Симпатии:
    0
    Так ведь все запросы MySql описаны через функции движка, аналогично функции update.
    --- Добавлено ---
    Я, конечно, благодарен за советы, но вы не на том внимание заострили. Был запрос
    PHP:
    1. $skybase = mysql_query("UPDATE `skyusers` SET `user_email`='{$user_email}'".$newpass." WHERE `user_id`='{$_SESSION['ses_user']}'",$db) or die(mysql_error());
    , мне его надо выполнить через движок скрипта osclass, т.е. привести к виду skyCom::newInstance()->update($aSkyCom,array('user_id'=>$_SESSION['ses_user'])). Функция update в движке описана через синтаксически правильные sql запросы. Мне просто нужно понять, что происходит тут: 'user_email'='{$user_email}'".$newpass." в контексте указанного sql запроса..
     
  9. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Ну ты давай не обижай нас тут. Не туда заострились. Зренки открой на своё первое сообщение. Что оно гласит? ЧО ЭТО спрашиваешь ты. Мы тебе отвечаем. Конкатенация, подстановка, ошибка в кавычках. А тебе оказывается путь в библиотеку надо было подсказать. Ну так ты сразу спрашивай по делу.
     
  10. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    что содержит?
    покажи запрос полностью, который формируется
     
    IvanK нравится это.
  11. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    что в ньюпасе?
     
    IvanK и denis01 нравится это.
  12. IvanK

    IvanK Новичок

    С нами с:
    7 июн 2016
    Сообщения:
    20
    Симпатии:
    0
    Да я и не думал обижать. Извини если что. Открыв зренки пошире, зацепил взором второе свое сообщение, в котором после благодарности за ответ, написал, что не все понял и спросил: получается сначала обновляется значение ячейки user_email в базе, а затем значение ячейки, записанное в $newpass ?? Мне в принципе понято, что такое конкатенация сама по себе, а вот в рамках этого кода, никак не доходит.
    Код (Text):
    1. $newpass = $user_pass;
    2.                 $code_pass = md5(md5($newpass) . $user_sol);
    3.                 $newpass=",`user_pass`='{$code_pass}',`user_sol`='{$user_sol}'";
    4.                 $_SESSION['pass'] = $code_pass;
     
  13. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    @IvanK где законченный sql запрос? который отправится в базу
     
  14. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    пропробуй не строку формировать а массив. судя по всему у тебя функция массив пар поле-значение принимать должна
     
  15. IvanK

    IvanK Новичок

    С нами с:
    7 июн 2016
    Сообщения:
    20
    Симпатии:
    0
    PHP:
    1. //настройки
    2. if ($mod=='nas' || empty($mod))
    3.    {
    4.    //общие
    5.    if ($act == "rednas")
    6.    {
    7.    if (isset($_POST['user_pass']) && !empty($_POST['user_pass']))
    8.    {$user_pass = globper('user_pass');
    9.             function usersol($n=3)
    10.             {  $key = '';
    11.                $pattern = '1234567890abcdefghijklmnopqrstuvwxyz.,*_-=+';
    12.                $counter = strlen($pattern)-1;
    13.                for($i=0; $i<$n; $i++)
    14.                {$key .= $pattern{rand(0,$counter)}; }
    15.                return $key;
    16.             }
    17.             $user_sol = usersol();
    18.             $newpass = $user_pass;
    19.             $code_pass = md5(md5($newpass) . $user_sol);
    20.             $newpass=",`user_pass`='{$code_pass}',`user_sol`='{$user_sol}'";
    21.             $_SESSION['pass'] = $code_pass;
    22.       }
    23.    else {$newpass=""; }
    24.    $user_email = globper('user_email');
    25.    if (empty($user_email)){ al("обязательно введите адрес электронной почты"); }
    26.    else
    27.       {
    28.    $skybase = mysql_query("UPDATE `skyusers` SET `user_email`='{$user_email}'".$newpass." WHERE `user_id`='{$_SESSION['ses_user']}'",$db)or die(mysql_error());
    29.       echo '<div class="ok">изменения внесены</div>';
    30.       }
    31.    }
     
  16. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    @IvanK где там sql который можно например выполнить через PHPMyAdmin? Ну и так вроде понятно, то ты не понимаешь что значит sql запрос? Чисты sql без php, который отправляешь в базу
     
  17. IvanK

    IvanK Новичок

    С нами с:
    7 июн 2016
    Сообщения:
    20
    Симпатии:
    0
    Ребят, при всем уважении - вы не внесли ясности в мою нубскую голову.. Подскажите путь в библиотеку..
    Где ни посмотрю, везде одна конструкция: SET `имя поля`='значение поля', а тут SET `user_email`='{$user_email}'".$newpass."
    Если это конкатенация, выходит в значении поля сидит строка типа "mail@mailPassword".
    Что такое sql запрос я понимаю, на сколько мой левел позволяет понимать. За идею спасибо - пропишу значения переменных выполню запрос и посмотрю что происходит, опять же, если я правильно понял идею
     
  18. mr.akv

    mr.akv Активный пользователь

    С нами с:
    31 мар 2015
    Сообщения:
    1.604
    Симпатии:
    206
    PHP:
    1. $sql = "UPDATE `skyusers` SET `user_email`='{$user_email}'".$newpass." WHERE `user_id`='{$_SESSION['ses_user']}'";
    2. echo $sql;
     
    denis01 нравится это.
  19. IvanK

    IvanK Новичок

    С нами с:
    7 июн 2016
    Сообщения:
    20
    Симпатии:
    0
    Всем спасибо за ответы, советы. Я понял. Запрос mySQL UPDATE делается по схеме: UPDATE `table_name`
    SET `column1`=value, column2=value2,... WHERE `some_column`=some_value ..ну если не придираться к синтаксису.
    У меня есть запрос mysql_query("UPDATE 'skyusers' SET 'user_email'='{$user_email}'".$newpass." WHERE 'user_id'='{$_SESSION['ses_user']}'",$db) or die(mysql_error()); который начинается двойными кавычками " перед UPDATE, затем после указания имени поля для обновления '{$user_email}', в запрос сделана php вставка переменной $newpass простой функцией со сложным названием "конкатенация". Т.е. двойные кавычки после '{$user_email}' как бы закрывают временно sql запрос, затем вставляется $newpass (в которой прописаны еще 2 поля со значениями $newpass=",`user_pass`='{$code_pass}',`user_sol`='{$user_sol}'"; (писал в сообщении №12, не придал сначала должного значения значению переменной $newpass).. Затем двойной кавычкой запрос продолжается условием WHERE... Таким макаром конструкция...SET `user_email`='{$user_email}'".$newpass." WHERE... просто позволяет обновлять одновременно 3 поля, два из которых прописаны в переменной $newpass
     
  20. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Чувак, тут нету запроса. Запрос - это то, что получится, когда в строку будет подставлено всё, что туда должно быть подставлено. И запрос будет ошибочный, поскольку ты не те кавычки используешь. И какая-то DAO-библиотека, которую ты используешь, вообще не причём. Вообще, обычно, прежде чем делать запрос на DAO или ORM, и даже прежде чем его делать через php, надо его целиком представить или даже попробовать выполнить вручную, в виде чистого SQL, через phpmyadmin или даже прямо через консоль mysql
     
    IvanK нравится это.
  21. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    Чё это за устаревшая библиотека ?

    Что ты используешь дай ссылку на библиотеку.
     
  22. IvanK

    IvanK Новичок

    С нами с:
    7 июн 2016
    Сообщения:
    20
    Симпатии:
    0
    http://os-class.ru/
     
  23. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    Мда нашёл что выбрать если уже так хочешь framework, чем тебе Laravel не устраивает ? Я в нём поработал пару недель, и знаешь у меня вообще ни каких претензий не было... Чётко классно, грамотно, всё шикарно работает, функционала зашибёшься.
    Ещё есть YII 2

    сам в неё не работал, но людей много кто её использует, и тоже всем всё нравится.

    функция mysql_query();

    Устарело и уже почти канула в вечность, а она там ещё используется, они издеваются, уже php 7.2 почти на дворе!
    --- Добавлено ---
    тут даже получается что моя самописаня, за месяц, библиотека, которую я ща пишу, куда совершеннее чем, что там :D что за хрень блин.
    --- Добавлено ---
    ещё и сайт кривой нафиг, даже ajax нету ни где там где он необходим просто, что блин, за ваще... Товарищ, остановись пока не поздно выкинь этот хлам. В топку спали его.
    Погоди ща через три месяца, я адекватно приведу свою библиотеку до ума раз тебе так уж хочется экстаза. Но совет возьми лучше за изучение Laravel - Это чудесная библиотека, то что я пишу в своей библиотеке, на прямую завязано, с функционалом, laravel, я смотрю что там и пытаюсь это реализовать, но блин то что ты используешь это смех и грех какой-то. Это один фиг что облиться бензином, и спичку поджигать стоять, и думать может мне повезёт.
    --- Добавлено ---
    Может он там и пытался что реализовать крутое за счёт, гео, но блин не об этом мне кажется надо думать, при реализации такого глобального понятия как framework. В первую очередь, framework это грамотно реализованная точка входа, хорошая структура и главное правильно реализованный стандарт написания, и первоначальный базовый функционал как запросы к бд, с их последующим экранирование, об этом думать, надо. Не думай, что я это просто так говорю, просто не с того путь надо начинать. ща кину тебе. ссылочку. на правильный путь.

    http://getjump.me/ru-php-the-right-way/

    Вот читай, я его ещё даже если честно не закончил весь познавать .
     
  24. IvanK

    IvanK Новичок

    С нами с:
    7 июн 2016
    Сообщения:
    20
    Симпатии:
    0
    Спасибо, мельком глянул - мне будет полезно, обязательно почитаю. Дело в том, что у меня стаж программирования чуть больше 3 месяцев, поэтому сравнивать мне особо не с чем. Была идея, знающий, но не имеющий свободного времени, человек посоветовал освоить и использовать word press, через него нашел скрипт доски объявлений osclass. Для решения задачи он подходил больше всего, т.к. с наименьшими трудозатратами можно было получить нужный результат. Библиотека dao, согласен, не очень удобная. Встроенный ajax контроллер там есть, я использовал. Laravel, на сколько я понял - широкопрофильная качественная платформа, а osclass - как я уже писал, подходила больше всего.
     
  25. askanim

    askanim Старожил

    С нами с:
    7 апр 2016
    Сообщения:
    2.201
    Симпатии:
    166
    Адрес:
    GABRIEL
    у меня 4 месяца в php и в общем плане, ну около года! :) Всё зависит от желания :)
    Даже меньше в php, 3 c кусочком