htmlentities не работает должным образом в Propel Symfony 1.2

проблема

  • его замена одинарных кавычек двойными кавычками

    echo $ motion_data

выходная строка:

    '200407', '200396', '200397', '200398', '200399', '200400', '200401', '200402', '200403', '200404'

код продвижения:

         $c->add(VmemberDetailsPeer::PERSON_ID,array(htmlentities($movement_data, ENT_QUOTES)),Criteria::IN);
echo $c->toString();
$person = VmemberDetailsPeer::doSelect($c);

ходовой запрос

 Criteria: SQL (may not be complete): SELECT FROM vmember_details WHERE vmember_details.PERSON_ID IN (:p1) Params: vmember_details.PERSON_ID => ''200407', '200396', '200397', '200398', '200399', '200400', '200401', '200402', '200403', '200404''

выход:

   array(0) { }

Что мне нужно

  • мне нужно передать ту же строку через запятую в предложении где.

  • если я непосредственно нажимаю строку с разделением comm_data в массиве ($ motion_data)

  • он выводит со специальными символами, такими как ‘\ 2222 \’, и так далее … что у меня есть htmlspecial символы в предложении where.

Не используй Htmlentities Результат propel query

         SELECT FROM vmember_details
WHERE vmember_details.PERSON_ID IN (:p1)

Params: vmember_details.PERSON_ID => '\'200407\', \'200396\', \'200397\', \'200398\', \'200399\', \'200400\', \'200401\', \'200402\', \'200403\', \'200404\''

Решение, которое я пробовал с разнесением сделать строку в массив:

 $x=explode(",",$movement_data);

выход:

      Array
(
[0] => '200407'
[1] => '200396'
[2] => '200397'
[3] => '200398'

)$c->add(VmemberDetailsPeer::PERSON_ID,$x,Criteria::IN);
echo $c->toString();
$person = VmemberDetailsPeer::doSelect($c);

Вывод запроса Propel:

      SELECT FROM vmember_details WHERE vmember_details.PERSON_ID IN (:p1,:p2,:p3,:p4,:p5,:p6,:p7,:p8,:p9,:p10) Params: vmember_details.PERSON_ID => '\'200407\'', vmember_details.PERSON_ID => ' \'200396\'', vmember_details.PERSON_ID => ' \'200397\'', vmember_details.PERSON_ID => ' \'200398\'', vmember_details.PERSON_ID => ' \'200399\'', vmember_details.PERSON_ID => ' \'200400\'', vmember_details.PERSON_ID => ' \'200401\'', vmember_details.PERSON_ID => ' \'200402\'', vmember_details.PERSON_ID => ' \'200403\'', vmember_details.PERSON_ID => ' \'200404\''
  • Мне нужно передать ту же строку, где предложение.

1

Решение

Вы извлекаете свои данные из строки, и на выходе получается этот массив

$x=explode(",",$movement_data);

Array
(
[0] => '200407'
[1] => '200396'
[2] => '200397'
[3] => '200398'
)

Затем вы передаете этот массив функции, которая создает оператор SQL.

Хорошо, теперь смотрите пример кода ниже

$a1 = array(1,2,3);
$a2 = array('1','2','3');
$a3 = array("'1'","'2'","'3'");

print_r($a1);
print_r($a2);
print_r($a3);Array
(
[0] => 1
[1] => 2
[2] => 3
)
Array
(
[0] => 1
[1] => 2
[2] => 3
)
Array
(
[0] => '1'
[1] => '2'
[2] => '3'
)

Первый массив $ a1 содержит целые числа, второй массив содержит строки с числами, третий массив содержит строки с числами в одинарных кавычках.

И именно это ваша проблема!

Вы ДОЛЖНЫ удалить одинарные кавычки из чисел, потому что драйвер БУДЕТ специально обрабатывать их (заменить ‘на \’), что вы и наблюдали:

SELECT FROM vmember_details
WHERE vmember_details.PERSON_ID IN (:p1)

Params: vmember_details.PERSON_ID => '\'200407\', \'200396\', \'200397\', \'200398\', \'200399\', \'200400\', \'200401\', \'200402\', \'200403\', \'200404\''

На самом деле там произошло нечто иное. Вы передали единственную строку, которая содержала одинарные кавычки для оператора. Драйвер проверяет строку, встречает одинарные кавычки и заменяет их на одинарные кавычки.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]