Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php htmlentities在推进symfony 1.2中工作不正常_Php_Oracle_Symfony 1.2 - Fatal编程技术网

Php htmlentities在推进symfony 1.2中工作不正常

Php htmlentities在推进symfony 1.2中工作不正常,php,oracle,symfony-1.2,Php,Oracle,Symfony 1.2,问题 它将单引号替换为双引号 echo$movement\u数据 输出字符串: '200407', '200396', '200397', '200398', '200399', '200400', '200401', '200402', '200403', '200404' 推进代码: $c->add(VmemberDetailsPeer::PERSON_ID,array(htmlentities($movement_data, ENT_QUOTES)),

问题

  • 它将单引号替换为双引号

    echo$movement\u数据

输出字符串:

    '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''
         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) { }
      Array
     (
      [0] => '200407'
      [1] => '200396'
      [2] => '200397'
      [3] => '200398'

     )


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

  • 我需要在where子句中传递相同的逗号分隔字符串

  • 如果我直接按数组中的移动\u数据通信分离字符串($movement\u data)

  • 它的输出带有特殊字符,如“\2222\”,等等。。。我在where子句中有htmlspecial字符
不使用Htmlentities结果查询

 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''
         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) { }
      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\''
  • 我需要传递相同的字符串where子句

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

      $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\''
      

      事实上,这里发生了一些不同的事情。您向语句传递了一个包含单引号的字符串。驱动程序检查该字符串,遇到单引号并将其替换为斜杠单引号。

      htmlentities对于数据库上下文是错误的-为什么要使用它?您可以在queryfirst:what is is中看到“\'200407\”出现$MOVENTION\u数据数组中的内容?那里应该只有数字字符串或整数。当您说查询中出现“\'200407\”时,我敢打赌数组包含类似“'200407'”的字符串(读:doublequote,singlequote 200407 singlequote doublequote)。然后数据库会将singlequotes转换为斜杠-singlequote。是否为数字(movemnet_数据):bool(false)?第一:变量名输入错误,第二:没有美元符号,第三:$movemnet_数据是一个数组-使用var_dump()