Я хочу получить базу данных MySQL на PHP и AngularJS.
Я делаю это:
<?php
require_once "connect.php";
header('Content-Type: application/json');
$rows = array();
$conn = mysqli_connect($host, $user, $db_pass, $db_name);
$quer = mysqli_query($conn,"SELECT * FROM Sheet1");
while ($data = mysqli_fetch_assoc($quer)) {
$rows[] = $data;
}
echo json_encode($rows);
?>
Но ничего не возвращается, и когда я установил это как:
<?php
require_once "connect.php";
header('Content-Type: application/json');
$rows = array();
$conn = mysqli_connect($host, $user, $db_pass, $db_name);
$quer = mysqli_query($conn,"SELECT * FROM Sheet1");
while ($data = mysqli_fetch_assoc($quer)) {
$rows = $data;
}
echo json_encode($rows);
?>
Я получу только одну последнюю запись
Мой основной файл html:
<!DOCTYPE html>
<html lang = "en" dir = "ltr">
<head>
<meta charset = "utf-8">
<script src='https://ajax.googleapis.com/ajax/libs/angularjs/1.7.2/angular.min.js'></script>
<title></title>
</head>
<body>
<div ng-app = "App" ng-controller = "mainController">
<ul ng-repeat = " x in data">
<li>{{x.id}}</li>
</ul>
</div>
<script src = "mainController.js">
</script>
</body>
</html>
и мой файл Javascript:
var app = angular.module('App', []);
app.controller('mainController', function($scope, $http){
$http.get('database.php').then( function( response){
$scope.data = response.data;
});
});
Пожалуйста, за помощь, это моя первая попытка.
Если ваш второй сценарий дает вам одну строку, но кажется, что первый ничего не дает, это не имеет смысла. Итак, я бы посмотрел на ваш код Angular, вот где будет ваша проблема.
Риггс прав, то, что вы утверждаете, невозможно. Ваш первый пример кода должен быть правильным. Вы можете убедиться в этом, используя сетевой инструмент вашего браузера, чтобы просмотреть ваш AJAX-запрос к database.php и посмотреть, что такое необработанный ответ (щелкните запрос ajax и затем просмотрите вкладку Response). Если данные там выглядят правильно, значит, проблема где-то в вашем коде Javascript / Angular. Лично я бы попробовал $scope.data = response; - я не вижу доказательств того, что в вашем объекте response будет свойство data. Скорее всего, это будет массив. Вы проверяли наличие ошибок консоли ??
Консоль @ADyson не показывает ошибок. Первый скрипт даже не работает как независимый файл, так что, возможно, это какая-то ошибка в базе MySQL ?. Когда я меняю echo json_encode($rows) на echo json_encode($rows[1]), он работает нормально.
"даже не работают" что именно означает? Ошибка PHP? Неожиданный выход? Пожалуйста, будьте ясны и точны. Также вы можете выполнить var_dump($rows); непосредственно перед строкой json_encode, чтобы проверить содержимое массива. Также возможен сбой json_encode. Он вернет false, если это произойдет, поэтому вы можете легко проверить это, а затем вы можете использовать json_last_error_msg () (php.net/manual/en/function.json-last-error-msg.php), чтобы узнать, почему. В основном я говорю, что вам нужно провести более тщательное расследование и отладку, чтобы точно определить, где происходит ошибка.
@ADyson Я использовал var_dump($rows);, и я получил все записи, поэтому массив работает, когда я добавляю json_last_error_msg(), я получаю SyntaxError: JSON.parse: unexpected character at line 1 column 1 of the JSON data, а в RAW DATA я получаю Malformed UTF-8 characters, possibly incorrectly encoded. Таким образом, MySQL не конвертируется в UTF-8, или мой json должен быть конвертирован. Я пробовал mb_convert_encoding($rows, 'UTF-8');, но ничего не случилось и ничего не изменилось после преобразования базы MySQL в utf-8_polish_ci.
Вы пробовали (помимо вышеперечисленного) json_encode($rows, JSON_UNESCAPED_UNICODE)? См. php.net/manual/en/json.constants.php. Немного сложно быть уверенным, не увидев необработанных данных. Также вы установили набор символов в своем соединении MySQL (php.net/manual/en/mysqli.set-charset.php)? Попробуйте комбинации из ваших предложений и моих и посмотрите, получится ли у вас что-то работать. P.S. ошибка JSON.parse возникает только из-за var_dump, она исчезнет, когда вы ее удалите - очевидно, мы добавили в ответ не-JSON-контент, который ему не нравится.
@ADyson Вот мои необработанные данные pastebin.com/EtvAPBjf Я попробовал JSON_UNESCAPED_UNICODE, и ничего не изменилось, также mb_convert_encoding не работает. Может быть, мои данные MySQL сломаны и просто неправильно составлен синтаксис JSON ?.
как насчет настройки кодировки для вашего соединения? Вы пробовали это? Вы пробовали все комбинации этих различных настроек, как предлагалось? Я сомневаюсь, что ваши данные полностью повреждены, если только там нет некоторых символов, которые даже не UTF8



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


$rows = $data;должен быть$rows[] = $data;. в противном случае вы перезапишете значение. Закрытие как опечатка.