2014-12-20 40 views
1

我最初创建了下面的查询以从我的数据库返回一些结果。通过准备好的语句从数据库提取行

$result = mysqli_query($con, "SELECT bookingId, locationName 
           FROM bookings 
           WHERE username = '$one'"); 
$output = array(); 
while($row = mysqli_fetch_assoc($result)) { 
    $output[]=$row; 
} 
print(json_encode($output)); 

但是,我现在想要使用准备好的语句并尝试了下面的内容。但它总是返回[]。这是通过准备好的语句返回行的正确方法。

$stmt = $con->prepare('SELECT bookingId,locationName 
FROM bookings 
WHERE username= ?'); 
$stmt->bind_param('s', $one); 
$stmt->execute(); 
$stmt->bind_result($id, $loc); 
$output = array(); 
while($row = $stmt->fetch()){ 
$output[] = $row; 
} 
$stmt->close(); 

print(json_encode($output)); 
+0

要么下降'bind_result'行了,你不要同时使用'$ id'和'$ loc'反正,或在循环中使用它('$输出[$ ID] = $ loc' )。 – raina77ow

回答

3

问题:

不像mysqliPDO功能fetch()不返回一行,它只是返回一个布尔值或NULL,检查文档:

#Value Description 
#TRUE Success. Data has been fetched 
#FALSE Error occurred 
#NULL No more rows/data exists or data truncation occurred 

SOLU重刑

$sql = ' 
SELECT bookingid, 
     locationname 
FROM bookings 
WHERE username = ? 
'; 
/* prepare statement */ 
if ($stmt = $con->prepare($sql)) { 
    $stmt->bind_param('s', $one); 
    $stmt->execute(); 
    /* bind variables to prepared statement */ 
    $stmt->bind_result($id, $loc); 
    $json = array(); 
    /* fetch values */ 
    if($stmt->fetch()) { 
     $json = array('id'=>$id, 'location'=>$loc); 
    }else{ 
     $json = array('error'=>'no record found'); 
    } 
    /* close statement */ 
    $stmt->close(); 
} 
/* close connection */ 
$con->close(); 
print(json_encode($json)); 
1

你可以尝试以下的(而不是使用bind_result()):

$result = $stmt->get_result(); 

$output = array(); 
while ($row = $result->fetch_assoc()) { 
    $output[] = $row['bookingId']; 
} 

它基本上使得已经在你的行的一个数组。可能是这对你更好。 如果你没有做任何事情在while循环一样,你可以做什么RobP建议,并且只需使用fetch_all

mysqli_fetch_all($result, MYSQLI_ASSOC); 
+0

fetchAll得到整个结果集比一个while循环更有意义... – RobP

+0

@RobP这是真的。只是试图保持在OP的格式,因为我不知道他在这期间想用它做什么。可能是他在循环中做了更多的事情。 – Bono