问题
用双引号替换单引号
echo $ movement_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) { }
我需要什么
我需要在where子句中传递相同的逗号分隔字符串。
如果我直接在数组中推送moving_data comm seperated string($ movement_data)
不要使用Htmlentities Result推进查询
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\''
解决方案我尝试使用make make make string to array:
$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);
推进查询输出:
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\''
答案 0 :(得分: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包含整数,第二个数组包含带数字的字符串,第三个数组包含数字用单引号包装的字符串。
这正是你的问题!
您必须从数字中删除单引号,因为驱动程序会专门处理它们(替换为' by \'),这是您观察到的:
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\''
事实上,那里发生了一些不同的事情。您传递了一个包含单引号的字符串。驱动程序检查字符串,遇到单引号并用斜杠单引号替换它们。