我有以下使用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);
答案 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 ";