Запрос работает нормально в phpmyadmin, возвращает 0 строк при запуске из php
-
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'