Как правильно внедрить этот запрос mySQL в файл PHP и отобразить результаты?

Главная тема:
https://stackoverflow.com/questions/35163890/you-have-an-error-in-your-sql-syntax-check-the-manual-that-corresponds-to-your?sfb=2

SELECT SUBSTRING(LEFT(configuration, LOCATE('abhol_firma', configuration) -30), LOCATE('treuhand_betrag', configuration) +22, 100) FROM tl_iso_product_collection_item WHERE LOCATE('abhol_firma', configuration) > 0 AND LOCATE('treuhand_betrag', configuration) > 0 ORDER BY id DESC LIMIT 1

Поэтому в основном мне нужно внедрить этот код в файл PHP и отобразить результат. Мой код до сих пор выглядит так:

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
$connection = mysqli_connect('localhost', 'user', 'pw', 'db');
$query = "SELECT SUBSTRING(LEFT(configuration, LOCATE('abhol_firma', configuration) -30), LOCATE('treuhand_betrag', configuration) +22, 100) FROM tl_iso_product_collection_item WHERE LOCATE('abhol_firma', configuration) > 0 AND LOCATE('treuhand_betrag', configuration) > 0 ORDER BY id DESC LIMIT 1";
$result = mysqli_query($connection, $query);

if($result === FALSE) {
echo mysqli_error($connection);
} else
while($row = mysqli_fetch_array($result)){
echo $row['configuration'];
}
mysqli_close($connection);
?>

Таблица tl_iso_product_collection_item: http://puu.sh/mUf65/b1498aa7fa.png

Состав: http://puu.sh/mUf78/f25448e1d7.png

Всякий раз, когда я пытаюсь выполнить это, появляется следующее сообщение:

Notice: Undefined index: configuration on line 12

Я попробовал буквально все, и я просто не знаю, где может быть проблема. Кто-нибудь может помочь? Заранее спасибо.

1

Решение

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

Решение, с которым вы столкнулись, абсолютно справедливо. Однако для удобства чтения рекомендуется использовать псевдонимы и имена столбцов.

Таким образом, ваш запрос должен выглядеть так:

SELECT
SUBSTRING(LEFT(configuration,
LOCATE('abhol_firma', configuration) - 30),
LOCATE('treuhand_betrag', configuration) + 22,
100) as configuration   /* note the alias here */
FROM
tl_iso_product_collection_item
WHERE
LOCATE('abhol_firma', configuration) > 0
AND LOCATE('treuhand_betrag', configuration) > 0
ORDER BY id DESC
LIMIT 1
1

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

Вам нужно назначить псевдоним столбца в этом запросе, так как вы используете функцию SUBQUERY, у которой нет имени, чтобы получить его напрямую через $row массив.

$query =
"SELECT
SUBSTRING(LEFT(configuration, LOCATE('abhol_firma', configuration) -30) as configuration,
LOCATE('treuhand_betrag', configuration) +22, 100) as locate
FROM tl_iso_product_collection_item
WHERE LOCATE('abhol_firma', configuration) > 0
AND LOCATE('treuhand_betrag', configuration) > 0
ORDER BY id DESC
LIMIT 1";
0

замена

while($row = mysqli_fetch_array($result)){
echo $row['configuration'];
}

с

while($row = mysqli_fetch_array($result)){
print_r($row[0]);
}

решил проблему

0