2015-04-16 2 views
0

У меня проблема с сопоставлением строк. У меня есть две строки, и они имеют два разных кода ASCII: Temat 1 - ASCII: 620 Temat 1 - ASCII: 588Почему две строки (они выглядят одинаково) имеют разные коды ascii?

Ascii генерируется с помощью этой функции:

for ($i = 0; $i < strlen($string); $i++) 
    { 
     $ascii += ord($string[$i]); 
    } 

Я думаю, именно поэтому мой sql-запрос дает мне пустой результат. Когда я делаю это:

$resultsT = $wpdb->get_results('SELECT post_id FROM wp_postmeta WHERE meta_key = "temat" AND meta_value = "'.$temat.'"', OBJECT); 

Результат запроса пуст. Но когда я это сделать:

$resultsT = $wpdb->get_results('SELECT post_id FROM wp_postmeta WHERE meta_key = "temat" AND meta_value = "Temat 1"', OBJECT); 

запросов в порядке.

+0

Не решение, но вы должны действительно использовать подготовленные заявления: http://php.net/manual/en/pdo.prepared-statements.php – mattm

+0

Да, спасибо, я знаю, но безопасность не моя проблема сейчас , Мне нужно это работать, и я не знаю, почему это не так. – Sunrise

+0

Каково содержимое '$ temat' в первом запросе? – mattm

ответ

1

Не много информации в вопросе, но я предполагаю, что это чувствительность к регистру в вашей базе данных. Обратите внимание, что разница в сумме кода ASCII составляет 32, что является разницей между строчными и строчными буквами в ASCII. Поэтому я бы предположил, что ваш php-код устанавливает $ temat в строку «t emat 1», но meta_value «T emat 1» с верхним регистром «T». Это будет учитывать как разницу кода ASCII, так и запрос, не возвращающий ожидаемые результаты.

EDIT: В новом комментарии говорится, что переменная $ temat установлена ​​на «temat». Проблема тогда в том, что meta_value является «Temat 1», и запрос ищет «temat». Они не равны. Вы либо хотите добавить недостающий «» к сообщению переменной $ temat, либо использовать LIKE запрос, чтобы соответствовать все, что начинается со строки «temat»:

post_id FROM wp_postmeta WHERE meta_key = "temat" AND meta_value like "'.$temat.'%"', OBJECT); 

EDIT 2: Значение переменной post не было задано - я неправильно читаю код, устанавливая его в строку «temat», когда он фактически установлен в значение переменной post с именем «temat».

+0

Да, это так. 'print_r' из' $ _POST' дает этот 'Array ([temat] => Temat 1 [priorytet] => [dzialanie] => [data_od] => [data_do] =>)' – Sunrise

+0

Возможно также, что у вас есть дополнительный пространство в начале или конце вашего значения переменной, 32 - код ascii для пробела. Попробуйте обрезать переменную перед ее использованием в запросе. – Rick

+0

Так просто, как это ... :) Большое вам спасибо, вы гений! Trim решил мои проблемы :) Еще раз спасибо! – Sunrise

Смежные вопросы