составляю следующий запрос 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 В чем здесь может быть проблема? Спасибо
давай реальный код. Иначе не правильно - читай документацию не правильно - читай документацию разбирайся сначала в одном месте, потом трогай другое. --- Добавлено --- https://www.php.net/manual/en/pdostatement.execute.php#example-1080
<?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]);
покажите что выходит при таком запросе? PHP: <?php $link = mysqli_connect("localhost", "ххх", "ххх", "ххх"); $marka1 = '[[*pagetitle]]'; /* проверка подключения */ if (mysqli_connect_errno()) { printf("Не удалось подключиться: %s\n", mysqli_connect_error()); exit(); } $query = "SELECT * from price WHERE marka = '{$marka1}'"; $result = mysqli_query($link, $query); $arr = []; while ($row = mysqli_fetch_assoc($result)) { $arr[] = $row; } /* очищаем результаты выборки */ mysqli_free_result($result); /* закрываем подключение */ mysqli_close($link); print_r($arr); // тут что? ?>
ошибка в while ($row = mysqli_fetch_array($result)) { } если плейсхолдеры поместить нельзя, почему значения тогда корректно отображаются в echo но не в select
После вывода они обрабатываются соотв. кодом. У БД-шных расширений свой формат плэйсхолдеров. Его и используйте. --- Добавлено --- P.S. Как выше написали, у вас какое-то «перевернутое представление». Подстановка фактических значений происходит после вывода (echo), а не до.