Requête fonctionne très bien dans les déclarations de phpmyadmin 0 lignes de php lorsqu'il est lancé

StackOverflow https://stackoverflow.com/questions/2232502

  •  19-09-2019
  •  | 
  •  

Question

Je suis vraiment déconcerté par cela. Voici le php:

Mise à jour: Je l'ai échappé aux entrées (avant que je l'ai fait d'une manière différente, mais je ne savais pas mysql_real_escape_string). , Je remplace également les guillemets avec des guillemets simples, mais le même problème se passe. Ci-dessous le code mis à jour:

$request = mysql_real_escape_string($_POST['id']);
$colName = mysql_real_escape_string($_POST['col_name']);

function executeAssoc1($q)
{
    $r = mysql_query($q) or die(mysql_error() . ' ' . $q);
    $rass = mysql_fetch_assoc($r);
    return $rass;
}

foreach(array_keys($_POST) as $pitem)
{

    if($pitem == (...what I want it to...))
    {
        $pitem_name = mysql_real_escape_string(rawurldecode($pitem));

        $qf = "SELECT * FROM possible_values WHERE table_id=$request AND col_name='$colName' AND value = '$pitem_name'";
        $qfr = executeAssoc1($qf);
        var_dump($pitem_name);
        echo '<br>';
        var_dump($qf);
        echo '<br>';
        var_dump($qfr);
    }

}

Voici une partie de ce que les sorties de code pendant une boucle:

  

string (37) "1 .Nouvelle Angleterre (région du Nord-Est)"
  string (122) "SELECT * FROM POSSIBLE_VALUES OÙ table_id = 3 ET COL_NAME = 'SECTION' ET valeur = '1 .Nouvelle Angleterre (région du Nord-Est)'"
  bool (false)

Maintenant, quand je copie cette requête dans le phpmyadmin éditeur de SQL ne retourne en fait un résultat. J'ai même essayé d'utiliser LIKE "% ...%" comme l'a suggéré dans ici mais la même chose se produit (phpmyadmin renvoie une ligne, php retourne 0 lignes).

Était-ce utile?

La solution

Dans le manuel sur rawurldecode () :

  

Note: rawurldecode () ne décode pas plus de symboles ( '+') dans les espaces. urldecode () fait.

si vous la sortie de votre requête mySQL, je parie que votre strting ressemblera à ceci:

1+.New+England+(Northeast+region)

essayer urldecode () comme l'entrée manuelle suggère.

Autres conseils

vous devez utiliser des guillemets simples au lieu de guillemets, par exemple:

SELECT * FROM possible_values WHERE table_id=3 AND col_name='DIVISION' AND value = '1 .New England (Northeast region)'

Les guillemets doubles ne sont pas autorisés pour les chaînes en SQL, car ils sont utilisés pour les identifiants (comme MySQL utilise le backtick « ` »). Je pense que MySQL leur permet de chaînes avec certains paramètres, mais vous ne devriez pas les utiliser.

Techniquement qui doit retourner une erreur, donc je ne pense pas que ce soit votre problème.

Quel pourrait être votre problème est que vous utilisez l'ancienne extension MySQL, qui peut ne pas soutenir votre version MySQL.

Peut-être une faute de frappe, mais

table_id=$request

devrait avoir guillemets autour de lui:

table_id='$request'
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top