请教一个字符串过长,被截掉的问题 现在有一个变量$sql,由于有“union all”,所以比较长。有时候会有内容被截掉,有什么办法能解决吗 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 原因有三:1. 数据库版本。2. PHP版本。3. 自己用错了PHP函数。 不明白你的意思 我还没有见过sql语句被截的情况 呵呵呵 我就是用的字符串拼接啊$sql = '......';$sql .= '......';$sql .= '......';$sql .= '......';$sql .= '......';$sql .= '......';$sql .= '......';$sql .= '......';......就是像上面这样一直拼接,到最后,发现后面有一部分被截掉,用echo $sql打印出来也是被截掉的。 $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; } } 看不出你的这个代码有阶段字符串的可能你能帖出被截断时的字符串吗?从你这个代码上看,你生成的 SQL 指令是错误的1、一条 select 指令只能有一个 ORDER 子句(不包括子查询)。使用 union 连接的多个 select 只算做一条2、limit 子句的条数计算比较复杂,一般需设置成前面出现的条数之和感觉将 FORM 后的部分处理成子查询比较好 每一次连接,都 echo 一下,看在哪里发生变化了。。看代码是没有问题的 PHP time()得到的时间比实际时间快2分多钟 php的2个小问题 做自己的网站遇到一个问题,我想在服务器上做一个程序,将网页中用户输入的信息用email发送到指定信箱? 关于PHP中的传值问题 在注册用户时用两个条件限制 上传得问题 Undefined offset 是什么问题啊?急 一个关于session的问题。 我觉得php论坛太冷清,是不是该邀请些高手过来? php最新版本已经升到7.1.0了,坛子里竟然一点动静都没有 Joomla安装问题 讨论一个有趣的问题,PHP手册为什么把待搜索的数组叫做$haystack呢???
1. 数据库版本。
2. PHP版本。
3. 自己用错了PHP函数。
$sql = '......';
$sql .= '......';
$sql .= '......';
$sql .= '......';
$sql .= '......';
$sql .= '......';
$sql .= '......';
$sql .= '......';
......
就是像上面这样一直拼接,到最后,发现后面有一部分被截掉,用echo $sql打印出来也是被截掉的。
$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;
}
}
你能帖出被截断时的字符串吗?从你这个代码上看,你生成的 SQL 指令是错误的
1、一条 select 指令只能有一个 ORDER 子句(不包括子查询)。使用 union 连接的多个 select 只算做一条
2、limit 子句的条数计算比较复杂,一般需设置成前面出现的条数之和感觉将 FORM 后的部分处理成子查询比较好
看代码是没有问题的