Php ob_start()正在部分捕获数据
我正在使用以下代码: PHP: 问题是:Php ob_start()正在部分捕获数据,php,mysql,database,ob-start,Php,Mysql,Database,Ob Start,我正在使用以下代码: PHP: 问题是: 当Iecho$theid时,它会显示完整的条目,但在将其插入数据库时,只会插入序列中的第一个条目,例如,对于条目buKPK,只会插入“b”,而不会插入其余条目 检查数据库中的字符长度(即,如果是varchar(10),确保在该字段中存储的字符不超过10个)检查数据库中的字符长度(即,如果是varchar(10),确保在该字段中存储的字符不超过10个)尝试使用ob_end_clean()而不是ob\u get\u clean()。对ob_start()的连
当I
echo$theid
时,它会显示完整的条目,但在将其插入数据库时,只会插入序列中的第一个条目,例如,对于条目buKPK
,只会插入“b”,而不会插入其余条目 检查数据库中的字符长度(即,如果是varchar(10),确保在该字段中存储的字符不超过10个)检查数据库中的字符长度(即,如果是varchar(10),确保在该字段中存储的字符不超过10个)尝试使用ob_end_clean()
而不是ob\u get\u clean()
。对ob_start()的连续调用创建“嵌套”缓冲上下文ob\u get\u clean()
获取并清除当前上下文,但不终止它,因此对ob\u start()
的第二次调用将创建第二个嵌套缓冲上下文。在这种情况下,您只需要捕获输出缓冲区,然后终止捕获上下文。尝试使用ob\u end\u clean()
而不是ob\u get\u clean()
。对ob_start()的连续调用创建“嵌套”缓冲上下文ob\u get\u clean()
获取并清除当前上下文,但不终止它,因此对ob\u start()
的第二次调用将创建第二个嵌套缓冲上下文。在这种情况下,您只需要捕获输出缓冲区,然后终止捕获上下文。运行此操作时,我得到了预期的结果。我对特定代码中ob_start解决方案的用途感到困惑。为什么你要回显结果而不是直接赋值?我只是假设他在简化代码以隔离问题。@mario,因为回显的内容将保存为数据库中的一个条目。有更好的主意吗?我是编程新手,所以我会使用从《傻瓜书》中学到的知识。用$theid=base\u encode($Guid,$alphabet)替换ob\u开始部分
如果您需要为数据库打印它(??),您可以稍后再回显该变量。我运行此命令时得到了预期结果。我对特定代码中的ob_start解决方法的用途感到困惑。为什么你要回显结果而不是直接赋值?我只是假设他在简化代码以隔离问题。@mario,因为回显的内容将保存为数据库中的一个条目。有更好的主意吗?我是编程新手,所以我会使用从《傻瓜书》中学到的知识。用$theid=base\u encode($Guid,$alphabet)替换ob\u开始部分代码>如果您需要为数据库打印它(???),您可以稍后再回显变量。谢谢Chris。使用它实际上让我得到了第二个角色,但不是之后的任何东西。谢谢克里斯。使用它实际上让我得到了第二个字符,但不是之后的任何东西。好了,这就成功了,我使用int()而不是varchar。。。谢谢shankhan。好了,我用int()代替了varchar。。。谢谢你。
// Generate Guid
function NewGuid() {
$s = strtoupper(uniqid(rand(),true));
$guidText =
substr($s,0,8) . '-' .
substr($s,8,4) . '-' .
substr($s,12,4). '-' .
substr($s,16,4). '-' .
substr($s,20);
return $guidText;
}
// End Generate Guid
$Guid = NewGuid();
$alphabet = '123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ';
function base_encode($num, $alphabet) {
$base_count = strlen($alphabet);
$encoded = '';
while ($num >= $base_count) {
$div = $num/$base_count;
$mod = ($num-($base_count*intval($div)));
$encoded = $alphabet[$mod] . $encoded;
$num = intval($div);
}
if ($num) $encoded = $alphabet[$num] . $encoded;
return $encoded;
}
function base_decode($num, $alphabet) {
$decoded = 0;
$multi = 1;
while (strlen($num) > 0) {
$digit = $num[strlen($num)-1];
$decoded += $multi * strpos($alphabet, $digit);
$multi = $multi * strlen($alphabet);
$num = substr($num, 0, -1);
}
return $decoded;
}
// Ob start
ob_start();
echo base_encode($Guid, $alphabet); //should output: bUKpk
$theid = ob_get_contents();
ob_get_clean();