За последние 24 часа нас посетили 17858 программистов и 1700 роботов. Сейчас ищут 1535 программистов ...

Вставка переменных в SQL запросы из под PHP

Тема в разделе "PHP и базы данных", создана пользователем D.Lans, 2 сен 2006.

  1. D.Lans

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

    С нами с:
    31 июл 2006
    Сообщения:
    345
    Симпатии:
    0
    Ситуация типичная.

    Из под PHP пишу запрос в MySQL.
    В качестве атрибутов запроса юзаю переменные.
    Со строковыми переменными проблем нет.

    PHP:
    1.  
    2. <?
    3. $sql = "INSERT INTO `users` VALUES (NULL, '".$login."', '".$pass."')";
    4. ?>
    5.  
    А вот с целочисленными переменными проблемка..
    Не воспринимает их мускуль


    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 '9' at line 1


    Подскажите, уважаемые, как вставлять в SQL запросы целочисленные переменные?
     
  2. Demon

    Demon Активный пользователь

    С нами с:
    20 апр 2006
    Сообщения:
    239
    Симпатии:
    0
    Код (Text):
    1.  
    2. <?
    3. $sql = "INSERT INTO users(login, pass /* какие у вас столбцы в users */) VALUES ('$login', '$pass')";
    4. ?>
     
  3. D.Lans

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

    С нами с:
    31 июл 2006
    Сообщения:
    345
    Симпатии:
    0
    Demon
    спасибо!

    Но вообще то надо то точками обрамлять переменные

    '.$number.' '.$number2.'
     
  4. vb

    vb Активный пользователь

    С нами с:
    6 июн 2006
    Сообщения:
    911
    Симпатии:
    0
    Адрес:
    Saint-Petersburg
    Если "но вообще", то раз уж пишем запрос в кавычках(""), то переменные нады бы в фигурные скобки писать :) А если разделяете строку то пишите в запрос в апосторфах(''). :)

    PHP:
    1. <?
    2. //Пример:
    3. $sql = "Запрос с переменной {$login} на мой вкус лучше так :)";
    4. $sql = 'Строка запроса разделенная для переменной '.$login.' надо писать в апострофах';
    5. ?>
    8)
     
  5. D.Lans

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

    С нами с:
    31 июл 2006
    Сообщения:
    345
    Симпатии:
    0
    vb :shock:
     
  6. D.Lans

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

    С нами с:
    31 июл 2006
    Сообщения:
    345
    Симпатии:
    0
    Уважаемые, подскажите, как в данном примере реализовать сабж:
    PHP:
    1.  
    2. <?
    3. $sql = "UPDATE `news` set title='".$title."' name='".$name."' description='".$description."' news_text='".$news_text."' where NewsID= '".$NewsID."'";
    4. ?>
    5.  
    Ошибки-с...

    Спать хочу, не могу разобраться.. :)
     
  7. simpson

    simpson Активный пользователь

    С нами с:
    11 фев 2006
    Сообщения:
    1.650
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    D.Lans
    может, запятые все же расставишь при перечислении полей? ;)
     
  8. Sh0t

    Sh0t Активный пользователь

    С нами с:
    14 июл 2006
    Сообщения:
    21
    Симпатии:
    0
    Запятые забыл :)

    PHP:
    1.  
    2. <?
    3. $sql = "
    4. UPDATE `news` set
    5. title='".$title."'[b],[/b]
    6. name='".$name."'[b],[/b]
    7. description='".$description."'[b],[/b]
    8. news_text='".$news_text."'
    9. where NewsID= '".$NewsID."'
    10. ";
    11. ?>
    12.  
     
  9. Mavir

    Mavir Guest

    Запятые ставить надо
     
  10. Belegnar

    Belegnar Активный пользователь

    С нами с:
    11 фев 2006
    Сообщения:
    299
    Симпатии:
    0
    Аффтар спать отвалился. :))))))))))))
    Теперь ему кошмары будут сниться. :)
     
  11. Diver

    Diver Активный пользователь

    С нами с:
    19 фев 2006
    Сообщения:
    144
    Симпатии:
    0
    Адрес:
    Владивосток
    товарищи. sql_placeholders
    и забыть вот про этот кошмар:
    PHP:
    1. <?
    2. $sql = "UPDATE `news` set title='".$title."' name='".$name."' description='".$description."' news_text='".$news_text."' where NewsID= '".$NewsID."'";
    3. ?>
     
  12. D.Lans

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

    С нами с:
    31 июл 2006
    Сообщения:
    345
    Симпатии:
    0
    simpson
    Sh0t
    Mavir
    спасибо, я так и думал, что что-то забыл. :)

    Belegnar, нет спал я хорошо. :)

    Diver, спасиб, но пока я не готов прибегать к чему то нестандартному. :)
     
  13. dragomir-onishhenko

    dragomir-onishhenko Новичок

    С нами с:
    21 фев 2014
    Сообщения:
    2
    Симпатии:
    0
    Добрый день господа!
    Я недавно вернулся из далекого плавания по другим профессиям и делаю сайт, почти все сделал, но не дал мне Бог понять как сделать двойной запрос, покуда плохо знаю sql.
    В общем суть проблемы такова на странице нужно извлечь данные из 2-х таблиц по переменной, которая выбирается из сессии.
    Есть 2 таблицы и переменная :i.
    $user =& JFactory::getUser();
    $i=$user->id;

    // определяем начальные данные
    $db_host = 'localhost';
    $db_name = 'name';
    $db_username = 'user';
    $db_password = 'pass';
    $db_table_to_show = '1';
    $db_table_to_show2 = '2';
    $db_table_to_show3 = '3;

    // соединяемся с сервером базы данных
    $connect_to_db = mysql_connect($db_host, $db_username, $db_password)
    or die("Could not connect: " . mysql_error());

    // подключаемся к базе данных
    mysql_select_db($db_name, $connect_to_db)
    or die("Could not select DB: " . mysql_error());

    // выбираем все значения из таблицы "Contacts"
    $qr_result = mysql_query("select * from . $db_table_to_show WHERE idclient = $i")
    or die(mysql_error());

    echo '<p></p>';

    while($data = mysql_fetch_array($qr_result)){
    echo '<p>Номер запроса:<font bacgroundcolor="red"> ' . $data['idzakaz'] . '</font></p>';
    echo '<p>Номер детали:<font bacgroundcolor="red"> ' . $data['idpartaccess'] . '</font></p>';
    }
    И вот здесь как-то надо вставить, чтобы выводилось не "while($data = mysql_fetch_array($qr_result)){
    echo '<p>Номер запроса:<font bacgroundcolor="red"> ' . $data['idzakaz'] . '</font></p>';
    echo '<p>Номер детали:<font bacgroundcolor="red"> ' . $data['idpartaccess'] . '</font></p>';
    }",
    а был второй запрос типа :("select * from . $db_table_to_show3 where id='.$data['idpartaccess'].'")
    и тогда уже выводились значения из 3-ей таблицы типа того же:
    echo '<p>Номер запроса:<font > ' . $data['id'] . '</font></p>';//из третьей таблички
    echo '<p>Номер детали:<font > ' . $data['name'] . '</font></p>';
    Если поможете - хвала Вам, покуда столько сделать и запороться на такой фигне...
     
  14. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    dragomir-onishhenko, вам надо связать две таблицы?

    Добавлено спустя 2 минуты 24 секунды:
    если да, то нужно указать внешний ключи во второй таблице как и у первой, а вот потом по этому ключу связать таблицы.
    вот тут что-то подобное делалось http://php.ru/forum/viewtopic.php?f=9&t=47451
     
  15. dragomir-onishhenko

    dragomir-onishhenko Новичок

    С нами с:
    21 фев 2014
    Сообщения:
    2
    Симпатии:
    0
    Вроде того, с ключами какая-то лажа, прошу прощения за мой французский, но в целом спасибо за совет, сейчас разберусь полагаю.

    Добавлено спустя 58 минут 38 секунд:
    Нет, господа - не могу я понять - убей меня! Хотя не надо.
    Как сделать так, чтобы получив переменную ИД из сессии он ее приравнял к переменной я понял, даже запрос отсылает к одной таблице по ней, но дальше мне нужно вывести инфу на страницу, из другой таблицы.
    Короче первый запрос выбирает по ИД строки-поле имя, подставляет его в другой запрос к другой табличке там выбирает по этому значению все строки и эхо все это!
    У меня такое впечатление что $vg=$idpartaccess в итоге не подставляется, точнее вобще нет переменной $data///

    $vg='.$idpartaccess.';
    echo $idpartaccess;

    while($data = mysql_fetch_array($qr_result)){

    $sql = mysql_query("select * from . $db_table_to_show3 WHERE id='.$idpartaccess.'")
    or die(mysql_error());
    Вот это не происходит. Я уже как только переменную не обзывал - ничего.
    Все - я придурок, забыл присвоить переменную $data, но тутже встал второй вопрос создается второй запрос - по идее должен выводить данные, uset($data); на всякий случай сделал, но все равно нефига.
    Короче весь вопрос остался в том - чтобы мне обычную перменную, которую я подставляю во второй запрос приравнять к массиву первого запроса, пока тольк....
    Стоп, мужики! Разобрался - я трижды невнимательное животное, вот ответ:
    // соединяемся с сервером базы данных
    $connect_to_db = mysql_connect($db_host, $db_username, $db_password)
    or die("Could not connect: " . mysql_error());

    // подключаемся к базе данных
    mysql_select_db($db_name, $connect_to_db)
    or die("Could not select DB: " . mysql_error());

    // выбираем все значения из таблицы "Contacts"
    $qr_result = mysql_query("select * from . $db_table_to_show WHERE idclient = $i")
    or die(mysql_error());

    echo '<p></p>';


    while($data = mysql_fetch_array($qr_result)){
    $vg = $data['idpartaccess'];
    unset($data);

    $sql = mysql_query("select * from . $db_table_to_show3 WHERE id=$vg")
    or die(mysql_error());
    echo $vg;
    while($data = mysql_fetch_array($sql)){
    echo '<p>Номер запроса:<font bacgroundcolor="red"> ' . $data['id'] . '</font></p>';
    echo '<p>Номер детали:<font bacgroundcolor="red"> ' . $data['name'] . '</font></p>';

    }
    }



    // закрываем соединение с сервером базы данных
    mysql_close($connect_to_db);
     
  16. Sleepwalker

    Sleepwalker Новичок

    С нами с:
    30 окт 2021
    Сообщения:
    1
    Симпатии:
    0
    Попробуйте что-то вроде этого
    файл database.php
    ===============
    PHP:
    1. <?php
    2.     $part1_ip = "--.--.--.--";
    3.     $part2_name = "Название";
    4.     $part3_p = "пароль";
    5.     $part4_db = "Название БД";
    6.     mb_internal_encoding("UTF-8");
    7.     $induction = mysqli_connect($part1_ip, $part2_name, $part3_p, $part4_db);
    8.     if ($induction == false){
    9.     echo "Ошибка";
    10. }
    11.  
    12. ?>
    Ваш файл
    ===============
    PHP:
    1. include 'database.php';
    2. $sql = "UPDATE archiv SET views='$views' WHERE id='$post_id'";
    3. mysqli_query($induction , $sql) or die (mysqli_error($induction) );
    Добавлено спустя 2 минуты 24 секунды:

    От модератора: Используйте кнопку </> для вставки кода
     
    #16 Sleepwalker, 30 окт 2021
    Последнее редактирование модератором: 30 окт 2021