2013-02-06 31 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不應該這樣做。 –