在使用MySQL的php中使用关联数组时遇到问题

时间:2014-12-18 12:54:59

标签: php mysql union associative-array

我有以下使用MySQL的PHP​​代码,

我想要做的是,对于每个$行,我想将值放在['name']列或['desc4']列中的$ encode []中,以便将其发送回javascript for处理..这似乎没有工作(例如只返回while循环中的else语句的结果),有人可以帮忙吗?

更清楚的是,列'name'和'desc4'中混合了值,所以我希望看到select语句的混合结果,但在我看来,它永远不会进入'if'语句中while循环。

无论如何检查$ row是否包含特定的列名?

$qTerms=explode(' ', $q);
$q_bits = array();
$q_bits2 = array();
foreach ($qTerms as $term){
    $term = sql_prep(trim($term));
    if(!empty($term)){
        $q_bits[] = "name LIKE '%{$term}%'";
    }
}

foreach ($qTerms as $term2){
    $term2 = sql_prep(trim($term2));
    if(!empty($term2)){
        $q_bits2[] = "desc4 LIKE '%{$term2}%'";
   }
}

$query  = "SELECT name FROM nutrients ";
$query .= "WHERE ".implode(' AND ', $q_bits);
$query .= " UNION ALL ";
$query .= "SELECT name FROM supplements ";
$query .= "WHERE ".implode(' AND ', $q_bits);
$query .= " UNION ALL ";
$query  = "SELECT desc4 FROM measures ";
$query .= "WHERE ".implode(' AND ', $q_bits2);

$result = mysqli_query($connection, $query);
if(!$result){
    die("Database query failed: ".mysqli_connect_error()."(".mysqli_connect_errno().")");
}

while($row = mysqli_fetch_assoc($result)){
    //$encode[] = $row['name'];
    if (in_array('name', $row)) {
        $encode[] = $row['name'];
    } else {
        $encode[] = $row['desc4'];
    }
}
mysqli_free_result($result);
echo json_encode($encode);

2 个答案:

答案 0 :(得分:0)

mysqli_result :: fetch_assoc仅在php 5之后可用...你有旧版本吗?然后更好地使用

mysqli_result::fetch_all ( MYSQLI_ASSOC )

答案 1 :(得分:0)

看起来union语句中的列名与“name”不同。插入var_dump($ row);在while循环中检查右列名称;你不需要if语句。 您也可以将您的查询包装在一个select中,并为该列指定一个正确的名称,或者根本不使用assoc,使用简单的数组insead。

修改 我发现了这个问题,你在这一行构建查询时错过了连接期(。):

$query  = "SELECT desc4 FROM measures ";