За последние 24 часа нас посетили 17949 программистов и 1650 роботов. Сейчас ищут 1144 программиста ...

Можно ли увидеть строку подготовленного запроса после привязки данных?

Тема в разделе "MySQL", создана пользователем abejon, 25 апр 2017.

  1. abejon

    abejon Новичок

    С нами с:
    25 апр 2017
    Сообщения:
    6
    Симпатии:
    0
    Есть подготовленный запрос вида:

    Код (Text):
    1.  
    2. SELECT c1, c2, c3
    3. FROM my_tbl
    4. WHERE
    5. c1 = CASE WHEN @iVal1 = -1 THEN c1 ELSE @iVal1 END
    6. AND c2 LIKE CASE WHEN sVal2 IS NULL THEN c2 ELSE @sVal2 END

    Если ничего передаю в запрос -1 и NULL соответственно, то получаю выборку всех значений таблицы. Если же передаю какие-то значения из существующих в таблице, то возвращается пустая выборка. Поэтому хотелось бы увидеть, какая строка получается после привязки параметров.

    На php это выглядит вот так:

    PHP:
    1. $query = "SELECT c1, c2, c3 "
    2. ."FROM my_tbl "
    3. ."WHERE "
    4. ."c1 = CASE WHEN ? = -1 THEN c1 ELSE ? END"
    5. ."AND c2 LIKE CASE WHEN ? IS NULL THEN c2 ELSE ? END"
    6. $stmt = $mysqli->prepare($query);
    7. $stmt->bind_param("is"
    8.         , $iVal1, $iVal1
    9.         , $sVal2, $sVal2
    10. );

    Если запрос с соответствующими значениями вставить в phpMyAdmin, то он отрабатывается нормально.
    И, собственно, вопрос, можно ли увидеть, что получается после выполнения?
     
  2. acho

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

    С нами с:
    28 дек 2016
    Сообщения:
    854
    Симпатии:
    210
    Адрес:
    Санкт-Петербург
  3. abejon

    abejon Новичок

    С нами с:
    25 апр 2017
    Сообщения:
    6
    Симпатии:
    0
    При попытке вызвать этот метод получаю сообщение об ошибке "Вызов неопределённого метода". У класса mysqli_stmt, который я использую нет такого метода.
     
  4. acho

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

    С нами с:
    28 дек 2016
    Сообщения:
    854
    Симпатии:
    210
    Адрес:
    Санкт-Петербург
    @abejon, а. я думал ты PDO используешь
     
  5. abejon

    abejon Новичок

    С нами с:
    25 апр 2017
    Сообщения:
    6
    Симпатии:
    0
    Нет, я использую mysqli. В его методах я не увидел ничего подобного предложенному методу.
     
  6. acho

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

    С нами с:
    28 дек 2016
    Сообщения:
    854
    Симпатии:
    210
    Адрес:
    Санкт-Петербург
    @abejon, чёт глянул, тоже не нашёл.
    Но, теоритически, можно сделать обёртку (расширить этот класс и добавить свой метод, с составлением запроса, использовать http://secure.php.net/manual/ru/mysqli-stmt.attr-get.php), или глянуть в исходниках, как выполняется запрос, хранится ли он в объекте, если да, то в своём методе попробовать взять запрос, если нет, переопределить метод отправки запроса и в своём методе реализовать нужные фичи.
    В общем хз, любой вариант гемороен. Подожди, может кто чё нормальное подскажет
     
  7. abejon

    abejon Новичок

    С нами с:
    25 апр 2017
    Сообщения:
    6
    Симпатии:
    0
    Спасибо. Посмотрел в логе, что получается, исправил - заработало.