2013-02-06 32 views
0

我遇到了一些奇怪的事情,我无法弄清楚它为什么会发生。我正在运行一个查询来从mysql表中的列中提取数据,并且当我直接执行printf()时,数据按预期发布。但是,当我做$variable = printf()时,我在字符串中获得了一个额外的值。

下打印是这样的: 22611,21435,23327,22876,22986,23692,21581,21832,22337,24313,22174,24368,

$query = "SELECT column FROM table WHERE year in (2012)"; 
if ($result = mysqli_query($connect, $query)) { 
    while ($row = mysqli_fetch_assoc($result)) { 
     printf ("%s,", $row["column"]); 
    } 
} 

但是,如果我试图把结果到像这样的变量:

$data = printf ("%s,", $row["column"]); 

我得到的 22611,21435,23327,22876,22986,23692,21581,21832,22337,24313,22174,24368,6

为什么输出它是否增加了这个额外的价值?我是否将结果错误地添加到变量中?仅供参考,这只是代码的一部分,我有错误处理。

+0

你应该看看printf()手册。顺便说一下,为什么你在请求中使用“in”? – mimipc

+0

由于年份实际上是一个变量,有时它的值是“2008,2009,2010”,或者是这种情况。 –

回答

3

改为使用sprintf()(它的工作原理与printf()完全相同)。这“沉默”它并给出了返回值。

+0

嗯,我试过,但是当我做'sprintf()',我只得到一个返回值。在这种情况下,它只返回'24368,' –

+0

它不是'sprintf()',相反,你不是将第一个'sprintf()'分配给一个变量并将其余的附加到它。 –

2

printf()输出数据并返回其长度。所以这就是额外价值的来源。你想要sprintf()只是返回值。

2

出于好奇,你为什么要用sprintf()

您可以直接或通过字符串连接将值分配给变量。

$data = $row["column"]; 
$data = $row["column"] . ','; 

查看更多about Strings in PHP

在这个特例中,我会推荐implode()

$data = array(); 
while ($row = mysqli_fetch_assoc($result)) { 
    $data[] = $row["column"]; 
} 
echo implode(',', $data); 
+1

完全同意这个OP,'sprint()'只是使用更多(尽管很少)的资源。 –

+0

这太好了,谢谢。我正在使用此解决方案。然而,接受第一个答复,因为我认为它更直接地回答了这个问题。 –

+0

我有同样的问题[这里]提到(http://stackoverflow.com/questions/11957541/mysql-fetch-array-returns-duplicate-data)。即使我使用'mysql_fetch_assoc()',它也会添加两次数组。任何想法为什么?我链接的那个线程表明mysql_fetch_assoc不应该这样做。 –