Запрос работает нормально в phpmyadmin, возвращает 0 строк при запуске из php

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

  •  19-09-2019
  •  | 
  •  

Вопрос

Я действительно озадачен этим.Вот php:

Обновлять: Я избежал входных данных (раньше я делал это по-другому, но не знал о mysql_real_escape_string).Кроме того, я заменяю двойные кавычки одинарными, но возникает та же проблема.Ниже приведен обновленный код:

$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);
    }

}

Вот часть того, что выводит этот код во время одного цикла:

string(37) "1 .Новая Англия (Северо-восточный регион)"
string(122) "ВЫБРАТЬ * ИЗ возможных_значений WHERE table_id=3 AND col_name='DIVISION' AND value = '1 .Новая Англия (северо-восточный регион)'"
логическое значение (ложь)

Теперь, когда я копирую этот запрос в редактор SQL phpmyadmin, он действительно возвращает результат.Я даже пробовал использовать LIKE "%...%", как предложено в здесь но происходит то же самое (phpmyadmin возвращает строку, php возвращает 0 строк).

Это было полезно?

Решение

Из мануала по rawurldecode():

Примечание:rawurldecode() не декодирует символы плюс ('+') в пробелы.urldecode() делает.

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

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

попробуйте urldecode(), как предполагает запись в руководстве.

Другие советы

вам следует использовать одинарные кавычки вместо двойных, т.е.:

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

Двойные кавычки не допускаются для строк в SQL, поскольку они используются для идентификаторов (например, MySQL использует обратную апострофу '`').Я думаю, что MySQL позволяет использовать их для строк с некоторыми настройками, но вам не следует их использовать.

Технически это должно вернуть ошибку, поэтому я не думаю, что это ваша проблема.

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

Возможно опечатка, но

table_id=$request

вокруг него должны быть кавычки:

table_id='$request'
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top