9
votes

La requête MySQL fonctionne dans phpmyadmin mais pas par PHP

Toute idée aiderait, j'ai été là-dessus depuis un moment et je ne peux tout simplement pas comprendre ce qui ne va pas.

problème: la requête fonctionne bien jusqu'à ce que j'ai ajouté dans la recherche de mots multiples que vous pouvez voir en gras ci-dessous. . Cependant, j'ai fait écho à la requête SQL puis collée à PHPMyAdmin et cela fonctionnait parfaitement, mais à travers le PHP, il en résulte avec 0 enregistrements. Cela n'a aucun sens et je ne peux pas comprendre ce qui pourrait causer un résultat de 0. xxx


20 commentaires

Une autre déclaration plus facile fonctionne-t-elle dans votre contexte? (Comme Select * des tapis)


Il serait utile de voir vos schémas de table et l'erreur de MySQL.


Oui, ils font aussi bien que si les zones entourées ** sont supprimées, il fonctionne simplement bien sur le front-end ... Cependant, lorsque j'ajoute ces sections à l'avant, cela ne fonctionne pas et du back (phpmyadmin) il fait


Si la même requête renvoie différents résultats de différents contextes, mon premier chèque serait si je l'exécute vraiment contre la même base de données?


Je sais que dans PHP, vous ne pouvez pas avoir plusieurs questions à MySQL séparées par; Donc, je me demande si cela pourrait être le même pour ** récupérera ici si je trouve quelque chose de plus clair


Êtes-vous sûr que c.item_no est un champ de texte? Cela ressemble plus à un numéro où vous ne pouvez pas utiliser comme '% texte%'


c'est la chose qu'il n'y a pas d'erreur renvoyée


Avez-vous essayé le match ... contre votre requête à la place?


juste pour clarifier ** a été ajouté à la requête juste pour montrer ce qui a été ajouté


Ce pourrait être une idée stupide, mais vous pouvez vérifier si vous avez un caractère spatial à la fin de chaque ligne.


À Djot, je l'ai résolu pour vérifier les valeurs de numéro toujours pas de changement


Si je mets en un seul mot, cela fonctionne, mais c'est lorsque je fais plusieurs mots, cela ne vérifie pas la vérification supplémentaire de séparer la recherche par espaces et d'ajouter une autre clause similaire pour accueillir chaque mot


Si quelqu'un aimerait le voir avec le SQL sortidé, vous pouvez aller à: 50.28.19.26/search.php et tapez la barre de recherche supérieure Le mot «nord» et il apportera les résultats correctement lorsque vous tapez «North Tabriz», il devrait apparaître tout ce qui a le nord et tout ce qui a Tabriz


Vous pouvez obtenir une meilleure aide si vous nous montrerez la structure de Tapis Table (Exécuter Décrivez des tapis et ajoutez la sortie ici) et écrivez ce C.Title comme '% North Tabriz%' comme C.Title comme '% North% Tabriz%' pas aussi (C.Title comme "% nord%") ou (C.Title comme '%% Tabriz% ')


ID INT (11) Non PRI NULL Auto_Increment actif Int (11) Aucun titre Null Varcharchar (250) Non Null Item_no Varchar (250) Non Null Cays Varcharchar (250) Pas de Null Période Varcharchar (250) Pas de motif Null Varcharchar (250) Non NULL PRIX PLOAT NON NULL WEB_SPECIAL FLOAT NOVEL NOTES NOVEL NOTES NO NULL WIDTH_FEET INT (11) NO NULL WIDTH_INCHES INT (11) NO NULL HAUTE_FEETE INT (11) NO NULL HAUT_INCHES INT (11) NO NULL LIMITE INT (11) NO NULL VISIONS_AmT INT (11) No Null Last_Modified DateTetime No Null Modified_By int (11) No Null


là tu vas je l'ai ajouté ci-dessus


La seule chose qui vous aiderait vraiment à vous aider à prendre de petites étapes et à essayer votre requête dans votre code en premier uniquement avec C.active = '1' et c.Titer comme '% North% Tabriz%' , puis si tout va bien, vous l'exécutez avec c.active = '1' et (c.Title comme '% North% Tabriz%' ou C.Item_no comme '% North% Tabriz%') Et ainsi de suite ...


Vous pouvez supprimer le c.itter comme '% North Tabriz%' , car il est équivalent à c.title comme "% North%" , qui contrefaite.


Cette requête est très chère. Vous devriez envisager de ré-normaliser vos données.


Pouvez-vous montrer votre code PHP? C'est ce qui semble être le problème ici.


6 Réponses :


2
votes

Essayez ceci:

SELECT 
    DISTINCT c.id 
FROM 
    carpets AS c 
    INNER JOIN carpet_relations AS r1 ON c.id = r1.carpet_id 
    INNER JOIN carpet_relations AS r2 ON c.id = r2.carpet_id
    INNER JOIN carpet_relations AS r3 ON c.id = r3.carpet_id
WHERE 
    c.active = '1' 

    AND ((c.title LIKE '%north%')
   OR (c.title LIKE '%tabriz%')
   OR (c.item_no LIKE '%north%')
   OR (c.item_no LIKE '%tabriz%')
   OR (c.pattern LIKE '%north%')
   OR (c.pattern LIKE '%tabriz%')
   OR (c.period LIKE '%north%')
   OR (c.period LIKE '%tabriz%') 
   OR (c.country LIKE '%north%')
   OR (c.country LIKE '%tabriz%'))

    AND (c.width_feet BETWEEN 0 AND 22) 
    AND (c.width_inches BETWEEN 0 AND 11) 
    AND (c.height_feet BETWEEN 0 AND 49) 
    AND (c.height_inches BETWEEN 0 AND 11) 
ORDER BY 
    c.item_no


0 commentaires

0
votes

Ce n'est probablement pas la requête, mais une erreur dans votre code PHP quelque part. Pouvez-vous vous poster votre code PHP pour nous pour regarder?


0 commentaires

3
votes

Payez une attention particulière sur la manière dont vous utilisez des devis en PHP également. Pour les requêtes SQL avec une clause Where Spécifiquement, cela peut être un problème depuis la clause où la clause doit indiquer où x = "valeur" en guillemets simples. Par conséquent, assurez-vous que votre chaîne SQL globale utilise des guillemets doubles. De plus, les variables PHP dans des guillemets simples ne seront pas évaluées, de sorte que si vous basez sur une clause de la variable PHP, vous devez envelopper cette variable dans des guillemets simples avant de l'utiliser dans l'instruction SQL. J'espère que tout cela a eu du sens, je suis resté coincé sur cette question pendant 2 jours lorsque j'ai commencé à apprendre PHP / MySQL.


0 commentaires

1
votes

Essayez d'abord des requêtes simples (pour tester la connexion) S'ils ne fonctionnent pas, consultez l'hôte de la base de données, le nom d'utilisateur, le mot de passe (ils pourraient être entrés à tort)

Une fois que vous êtes sûr de la connexion DB, essayez d'utiliser la fonction multi-requêtes en PHP, supprimez l'espacement inutile, exécutez la requête dans A pour boucle ou plusieurs étapes

J'espère que cela aide


0 commentaires

0
votes

Parfois, je reçois ce problème, cela ne se produit que lorsqu'il y a un problème de connexions ou de votre requête. Veuillez imprimer votre requête et voir comment elle imprime. Dans la requête, vous devez utiliser $ var .


0 commentaires

0
votes

Essayez de gérer ("") correctement dans votre code PHP. Si votre requête fonctionne correctement dans PhpMyAdmin, il doit également fonctionner avec votre code PHP. Ou il pourrait y avoir une erreur dans votre connexion de base de données. Assurez-vous de sélectionner une base de données correcte de votre table souhaitée.


0 commentaires