2014-11-06 1 views
0

Я думал, что я хочу просто, но по какой-то причине я застрял. У меня есть следующие:php с использованием mysqli конвертировать результаты в массив, а затем в json

$sql = "..."; 
if ($stmt = $con->prepare($sql)) {   
    $stmt->bind_param("sss", $x,$y,$z); 
    if ($stmt->execute()) { 
     $result = array(); //not sure if needed 
     $stmt->bind_result($x1,$y1,$z1); //not sure if needed 
     //loop resultset and put it in an array ($result); 
     echo json_encode($result); // convert to json 
     $stmt->close(); 
    } 
} 

Я видел fetchAll, FETCH_ASSOC и многое другое, но я продолжаю получать ошибки для этих вызовов/функций, как определено. Другие примеры были для не подготовленных заявлений. Независимо от того, что я пробовал, мне не удалось создать массив с набором результатов, что мне не хватает?

Благодаря

+0

, где и как вы установили $ против? – bksi

+0

[$ stmt-> get_result()] (http://php.net/manual/en/mysqli-stmt.get-result.php) [-> fetch_all()] (http://php.net/manual /en/mysqli-result.fetch-all.php), для этих функций требуется драйвер [mysqlnd] (http://php.net/manual/en/book.mysqlnd.php), доступный с PHP 5.3, включен по умолчанию начиная с PHP 5.4. – Danijel

+0

http://php.net/manual/en/mysqli-stmt.get-result.php – bksi

ответ

0

После использования bind_result, вам все равно нужно получить те:

$sql = "SELECT col1, col2, col3 FROM table_name WHERE col4 = ? AND col5 = ? AND col6 = ?"; 
if ($stmt = $con->prepare($sql)) {   
    $stmt->bind_param('sss', $x,$y,$z); 
    if ($stmt->execute()) { 
     $result = array(); 
     $stmt->bind_result($x1,$y1,$z1); 

     // You forgot this part 
     while($stmt->fetch()) { 
      $result[] = array('col1' => $x1, 'col2' => $y1, 'col3' => $z1); 
     } 

     echo json_encode($result); // convert to json 
     $stmt->close(); 
    } 
} 

Или, если вы mysqlnd драйвер на систему:

$sql = "SELECT col1, col2, col3 FROM table_name WHERE col4 = ? AND col5 = ? AND col6 = ?"; 
if ($stmt = $con->prepare($sql)) {   
    $stmt->bind_param('sss', $x,$y,$z); 
    if ($stmt->execute()) { 
     $data = $stmt->get_result(); 
     $result = array(); 

     while($row = $data->fetch_assoc()) { 
      $result[] = $row; 
     } 

     echo json_encode($result); // convert to json 
     $stmt->close(); 
    } 
} 
+0

У меня нет драйвера sqlnd, и поэтому ни один из «чистых» решений не работал. Уверен, у меня 5,4, но я спрошу у своей хостинговой компании. – Amos

+0

@ Амос да, вы должны, на самом деле, если можете, стрелять за 5.5. рад это помогло – Ghost