2016-02-03 1 views
1

Sujet principal: https://stackoverflow.com/questions/35163890/you-have-an-error-in-your-sql-syntax-check-the-manual-that-corresponds-to-your?sfb=2Comment implémenter correctement cette requête mySQL dans un fichier PHP et afficher les résultats?

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 

Donc, fondamentalement, je dois mettre en œuvre ce code dans un fichier PHP et afficher le résultat. Mon code afin ressemble beaucoup à ceci:

<?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); 
?> 

La table tl_iso_product_collection_item: http://puu.sh/mUf65/b1498aa7fa.png

Structure: http://puu.sh/mUf78/f25448e1d7.png

whenver J'essaie d'exécuter ce le message suivant apparaît:

Notice: Undefined index: configuration on line 12 

I essayé littéralement tout et je ne sais pas où le problème peut être. Quelqu'un peut-il aider? Merci d'avance.

+0

On dirait que votre variable 'configuration' n'a pas été réglée. Où est-ce censé être assigné? – Defiant

Répondre

0

Vous devez affecter un alias de colonne dans cette requête puisque vous utilisez la fonction SUBQUERY, qui n'a pas de nom pour l'obtenir directement via le tableau $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

remplaçant

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

avec

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

a résolu le problème

+0

Deniz, S'il vous plaît examiner la réponse que j'ai posté ci-dessous, ainsi que l'une des boucles que vous utilisiez. Le premier est cependant généralement préféré pour la lisibilité. –

1

Chaque fois que vous utilisez des fonctions pour les colonnes, vous devez leur attribuer un alias. La raison en est que vous utilisez peut-être plusieurs colonnes dans la fonction, et MySQL ne saura pas automatiquement lequel utiliser pour la sortie de la colonne unique, et il vous génèrera un nom de colonne similaire à la fonction que vous avez utilisée.

La solution que vous avez trouvée est absolument valable. Cependant, à des fins de lisibilité, l'utilisation d'alias et de noms de colonnes est recommandée.

Ainsi, votre requête doit se lire comme tel:

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