1

主题: https ://stackoverflow.com/questions/35163890/you-have-an-error-in-your-sql-syntax-check-the-manual-that-c​​orresponds-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

我确实尝试了所有方法,但我只是不知道问题可能出在哪里。任何人都可以帮忙吗?提前致谢。

4

3 回答 3

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
于 2016-02-03T22:05:17.647 回答
0

您需要在此查询中分配列别名,因为您使用的是 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";
于 2016-02-03T12:49:37.757 回答
0

更换

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

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

解决了问题

于 2016-02-03T12:55:44.710 回答