首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >propel实体在propel symfony 1.2中没有正常工作

propel实体在propel symfony 1.2中没有正常工作
EN

Stack Overflow用户
提问于 2016-07-20 13:44:22
回答 1查看 82关注 0票数 1

问题

  • 它用双引号代替单引号 回波$movement_data

输出字符串:

代码语言:javascript
复制
    '200407', '200396', '200397', '200398', '200399', '200400', '200401', '200402', '200403', '200404'

推进代码:

代码语言:javascript
复制
         $c->add(VmemberDetailsPeer::PERSON_ID,array(htmlentities($movement_data, ENT_QUOTES)),Criteria::IN);
         echo $c->toString();
         $person = VmemberDetailsPeer::doSelect($c);

推进查询

代码语言:javascript
复制
 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''

产出:

代码语言:javascript
复制
   array(0) { }

我所需要的

  • 我需要在where子句中传递相同的逗号分隔字符串。
  • 如果我直接按movement_data通信,数组中分离的字符串($movement_data)
  • 它输出特殊字符,如‘\2222’,等等.在where子句中有have特殊字符。

不要使用propel实体结果推进查询

代码语言:javascript
复制
         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\''

我尝试过的解决方案,用tried,make string数组:

代码语言:javascript
复制
 $x=explode(",",$movement_data);

产出:

代码语言:javascript
复制
      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查询输出:

代码语言:javascript
复制
      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\''
  • 我需要传递相同的字符串where子句。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-21 08:21:30

从字符串中提取数据,输出就是该数组。

代码语言:javascript
复制
$x=explode(",",$movement_data);

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

然后将该数组传递给创建和SQL语句的函数。

好的,现在请看下面的代码示例

代码语言:javascript
复制
$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 \'),这是您观察到的:

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38483055

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档