mysql — каскадное эхо строки вышло из строя при переполнении стека

У меня проблема с этим коротким сценарием, который убил меня за прошедший день.

Я пытаюсь объединить значение из таблицы базы данных mysql в строку, и вывод не в порядке.

Рассмотрим следующий код:

$result = mysqli_query($con, "SELECT something FROM table");
while ($row = mysqli_fetch_array($result)){
$foo ='<iframe src="http://www.website.com/embed/' . $row[0] . '%';
echo $foo;
}

Результат этого приводит к:

%iframe src="http://www.website.com/embed/84a42780062ce000dcb5

Мой желаемый вывод это:

<iframe src="http://www.website.com/embed/84a42780062ce000dcb5%

Почему что-то сцепленное после того, как $ row [0] помещается в начало строки? И почему<«полностью игнорируется в выводе?

Как я могу достичь желаемого результата?

Из комментариев:

Я должен добавить, что я делаю это в командная строка с моего сервера.

0

Решение

Учитывая, что вы видите этот странный вывод в командной строке сервера, это признак того, что что-то не так с данными, которые хранятся в базе данных. В частности, быть в поисках символа возврата каретки \r (шест 0D) в конце $row[0] строка.

Если присутствует ЧР, за которым не следует перевод строки \n, это заставит консоль вернуться к началу текущей строки. Затем печатает % в начале строки, перезаписывая <,

Это можно решить, обернув значение базы данных в trim(),

$foo ='<iframe src="http://www.website.com/embed/' . trim($row[0]) . '%';

Вы можете проверить это, проверив строку с bin2hex() и ищет 0d в конце или просто проверяя, что strlen() это ожидаемая длина, а не ожидаемая длина плюс один.

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

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]