【问题标题】:MySQL query from PHP returns incorrect results来自 PHP 的 MySQL 查询返回不正确的结果
【发布时间】:2015-05-19 19:10:07
【问题描述】:

我的 MySQL 表“tracks”有这两个字段:

Id (Int)
Name (Varchar 255)

值是:

1   Day 1
2   Day 2
3   Day 3

我正在尝试使用以下函数从 PHP 中检索所有曲目:

function getTracks() {
    $query = sprintf('select * from tracks');
    return contentRetrieverDataBaseQuery($query)->fetchAssoc();
}

function contentRetrieverDataBaseQuery($query) {
    $settings = contentRetrieverGetSettings();
    Database::addConnectionInfo('contentRetriever', 'default', $settings['database_connection']);
    db_set_active('contentRetriever');
    $result = db_query($query);
    db_set_active();
    return $result;
}

在 phpmyadmin 上运行 select * from event_tracks 我得到了正确的结果。

当我这样做时:

$tracks = getTracks();
foreach ($tracks as $track) {
  echo $track['name'];
}

我得到一个输出“1D”,它是 ID 和名称的第一个字母。

我做错了什么?

编辑:更正了数据库的名称

【问题讨论】:

  • 在您的contentRetrieveDataBaseQuery 中没有任何地方定义$result...
  • @MarcB $result = db_query($query);
  • @camil:提醒我去看验光师...
  • 好的,现在我睁开了眼睛,很可能->fetchAssoc() 正在返回单行数据,这意味着$tracks 是一个单级数组,而$track['name'] 正在接受$track 中的字符串值并尝试将其视为字符串,这意味着$foo = 'bar'; echo $foo[1] 输出a。 - ['name'] 将被解析为 [0]
  • 使用fetchAll而不是fetchAssoc将所有结果作为一个多维数组。

标签: php mysql sql drupal-7


【解决方案1】:

->fetchAssoc() 总是返回单行查询结果,这意味着您的数组是单条记录,您的循环将把该行的字符串值放入$track。然后您可以像使用数组一样使用$track,生成以下等效代码:

$arr = array('abc', 'def'); // your one row of query results.
foreach($arr as $value) {
   // $value is now 'abc';
   echo $value['name']; // parsed/executed as $value[0];
  // output is 'a'
}

字符串可以被视为字符数组,这就是 PHP 没有抱怨 $tracks['name'] 的原因。它只是将['name'] 视为使用非数字数组索引的愚蠢尝试,并将其转换为0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-22
    相关资源
    最近更新 更多