За последние 24 часа нас посетили 5020 программистов и 658 роботов. Сейчас ищет 151 программист ...

Переменные в запросе SELECT

Тема в разделе "PHP и базы данных", создана пользователем Grig24, 12 июн 2019.

  1. Grig24

    Grig24 Новичок

    С нами с:
    11 июн 2019
    Сообщения:
    4
    Симпатии:
    0
    составляю следующий запрос

    try {
    $conn = new PDO("mysql:host=$localhost;dbname=ххх", 'ххх', 'ххх');
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $stmt = $conn->prepare ("SELECT * FROM `price` WHERE `marka` = :marka");
    // передаем значения в запрос и выполняем его
    $stmt->execute([':marka' => $marka1]);

    или же по старинке

    $sql = mysqli_query($connect, "SELECT * from price WHERE `marka` = '$marka1'") or die ('!!!!!' . mysqli_error($connect));

    результат один - если перед запросом я прописываю переменную явно,
    к примеру
    $marka1 = '30ХМА';
    то запрос работает.

    если я прописываю
    $marka1 = '[[*pagetitle]]';
    то нет.
    Причем само значение присваивается, так как при коде
    $marka1 = '[[*pagetitle]];
    echo $marka1;

    он выводит
    30ХМА
    Такая же история, если я использую переменную в switch или if() else
    В чем здесь может быть проблема? Спасибо
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    5.592
    Симпатии:
    906
    Адрес:
    Лень
    давай реальный код.

    Иначе
    не правильно - читай документацию
    не правильно - читай документацию
    разбирайся сначала в одном месте, потом трогай другое.
    --- Добавлено ---
    https://www.php.net/manual/en/pdostatement.execute.php#example-1080
     
  3. Grig24

    Grig24 Новичок

    С нами с:
    11 июн 2019
    Сообщения:
    4
    Симпатии:
    0
    <?php
    error_reporting(E_ALL | E_NOTICE);
    ini_set('display_errors', 1);

    $connect = mysqli_connect("localhost", "ххх", "ххх", "ххх");
    $marka1 = '[[*pagetitle]]';
    echo $marka1; // отображается значение

    $sql = mysqli_query($connect, "SELECT * from price WHERE `marka` = '$marka1'") or die ('!!!!!' . mysqli_error($connect));
    $num=1;

    while ($row=mysqli_fetch_array($sql)) {

    echo "<td width=\"20%\" style=\"padding-left:5px;\">$row[1]</td><td width=\"15%\">$row[2]</td><td width=\"10%\">$row[3] $row[4]</td><td width=\"10%\">$row[5]</td><td width=\"15%\">$row[6]</td><td width=\"10%\">$row[7]</td><td width=\"20%\">$row[8]</td></tr>";
    $num ++;

    }
    // не видит в запросе

    сниппет modx revo , вставляется в страницу, откуда беру [[*pagetitle]]
    --- Добавлено ---
    второй вариант
    try {
    $conn = new PDO("mysql:host=$localhost;dbname=ххх", 'ххх', 'ххх');
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $stmt = $conn->prepare ("SELECT * FROM `price` WHERE `marka` = :marka");
    // передаем значения в запрос и выполняем его
    $stmt->execute([':marka' => $marka1]);
     
  4. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    1.152
    Симпатии:
    155
    покажите что выходит при таком запросе?
    PHP:
    1. <?php
    2. $link = mysqli_connect("localhost", "ххх", "ххх", "ххх");
    3.  
    4. $marka1 = '[[*pagetitle]]';
    5.  
    6. /* проверка подключения */
    7.     printf("Не удалось подключиться: %s\n", mysqli_connect_error());
    8.     exit();
    9. }
    10.  
    11. $query = "SELECT * from price WHERE marka = '{$marka1}'";
    12. $result = mysqli_query($link, $query);
    13. $arr = [];
    14. while ($row = mysqli_fetch_assoc($result)) {
    15.        $arr[] = $row;
    16. }
    17.  
    18. /* очищаем результаты выборки */
    19.  
    20. /* закрываем подключение */
    21. mysqli_close($link);
    22.  
    23. print_r($arr);  // тут что?
    24. ?>
     
  5. Grig24

    Grig24 Новичок

    С нами с:
    11 июн 2019
    Сообщения:
    4
    Симпатии:
    0
    ошибка в
    while ($row = mysqli_fetch_array($result)) {
    }

    если плейсхолдеры поместить нельзя, почему значения тогда корректно отображаются в echo но не в select

     
  6. Artur_hopf

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

    С нами с:
    7 май 2018
    Сообщения:
    1.152
    Симпатии:
    155
    @MouseZver я даже не знаю что такое шорткод =)
     
  7. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    5.592
    Симпатии:
    906
    Адрес:
    Лень
    @Grig24? потому что echo у тебя выводит [[*pagetitle]]
     
  8. miketomlin

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

    С нами с:
    9 авг 2016
    Сообщения:
    1.729
    Симпатии:
    256
    После вывода они обрабатываются соотв. кодом. У БД-шных расширений свой формат плэйсхолдеров. Его и используйте.
    --- Добавлено ---
    P.S. Как выше написали, у вас какое-то «перевернутое представление». Подстановка фактических значений происходит после вывода (echo), а не до.
     
  9. Grig24

    Grig24 Новичок

    С нами с:
    11 июн 2019
    Сообщения:
    4
    Симпатии:
    0
    всё решено, спасибо. Просто плейсхолдер через переменную нужно было вывести в чанке