现在有一个变量$sql,由于有“union all”,所以比较长。
有时候会有内容被截掉,有什么办法能解决吗

解决方案 »

  1.   

    原因有三:
    1. 数据库版本。
    2. PHP版本。
    3. 自己用错了PHP函数。
      

  2.   

    不明白你的意思  我还没有见过sql语句被截的情况  呵呵呵
      

  3.   

    我就是用的字符串拼接啊
    $sql = '......';
    $sql .= '......';
    $sql .= '......';
    $sql .= '......';
    $sql .= '......';
    $sql .= '......';
    $sql .= '......';
    $sql .= '......';
    ......
    就是像上面这样一直拼接,到最后,发现后面有一部分被截掉,用echo $sql打印出来也是被截掉的。
      

  4.   


    $sql = "";
                 $bflg = true;
                   foreach ($all_qt_obj[$i] as $value) {
                  
                   if (!$bflg){
                   $sql .= " union all ";
                   }
                  
                 $sql .= " SELECT q.* ";
                 $sql .= " FROM ";
                 $sql .= " {$CFG->prefix}question q ";
                 $sql .= " INNER JOIN {$CFG->prefix}question_categories qc ON  ";
                 $sql .= "     qc.id = q.category AND q.hidden='0' AND q.parent='0'  ";
                 $sql .= " LEFT  JOIN {$CFG->prefix}question_attributes qa ON  ";
                 $sql .= "     q.id = qa.q_id ";
                 $sql .= " WHERE qtype = 'multianswer' ";
                 $sql .= " AND IFNULL( qa.commonmodulus, 0.1 ) >= $value->From ";
                 $sql .= " AND IFNULL( qa.commonmodulus, 0.1 ) <= $value->To ";
                 $sql .= " AND FIND_IN_SET(qc.contextid,'$ce_contexts_array[$k]') ";
                 $sql .= " ORDER BY RAND() ASC limit {$value->Total}";
                                
                       if (count($all_qt_obj[$i]) > 1){ 
                          $bflg = false;
                       }
                 }
      

  5.   

    看不出你的这个代码有阶段字符串的可能
    你能帖出被截断时的字符串吗?从你这个代码上看,你生成的 SQL 指令是错误的
    1、一条 select 指令只能有一个 ORDER 子句(不包括子查询)。使用 union 连接的多个 select 只算做一条
    2、limit 子句的条数计算比较复杂,一般需设置成前面出现的条数之和感觉将 FORM 后的部分处理成子查询比较好
      

  6.   

    每一次连接,都 echo 一下,看在哪里发生变化了。。
    看代码是没有问题的