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 的输出

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

4

3 回答 3

4

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

于 2013-02-06T18:26:34.120 回答
2

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

于 2013-02-06T18:28:50.133 回答
2

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

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

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

阅读更多关于PHP 中的字符串

在这种特定情况下,我会推荐implode().

$data = array();
while ($row = mysqli_fetch_assoc($result)) {
    $data[] = $row["column"];
}
echo implode(',', $data);
于 2013-02-06T18:33:13.300 回答